当前位置: 首页 > news >正文

动态规划-两个数组的dp问题——44.通配符匹配

1.题目解析

题目来源:44.通配符匹配——力扣

测试用例

2.算法原理

1.状态表示

本题属于两个数组的dp问题,这里需要使用p中的字符消去s中的字符且p中有特殊字符可以匹配s中的普通字符,属于寻找相同子序列的变式,所以需要一个二维dp表且表达意义为:

dp[i][j]:p的[0,j]区间是否可以匹配s的[0,i]区间的所有字符,所以数据类型为布尔类型

2.状态转移方程

由于p中的字符可以分为三类,所以如下图对状态转移方程的分析

3.初始化

初始化需要设置虚拟位置并给初值,具体如下图

4.填表顺序

从上到下,每一行从左到右

5.返回值

根据状态表示可知需要返回dp[m][n]

3.实战代码

代码解析

class Solution {
public:bool isMatch(string s, string p) {int m = s.size();int n = p.size();vector<vector<bool>> dp(m + 1, vector<bool>(n + 1));dp[0][0] = true;s = " " + s;p = " " + p;for (int j = 1; j <= n; j++) {if (p[j] == '*') {dp[0][j] = true;} else {break;}}for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (p[j] == '*') {dp[i][j] = dp[i - 1][j] || dp[i][j - 1];} else {dp[i][j] =(p[j] == '?' || s[i] == p[j]) && dp[i - 1][j - 1];}}}return dp[m][n];}
};

http://www.mrgr.cn/news/66236.html

相关文章:

  • Linux内核时钟系统技术内幕
  • Hume.ai 升级:自研情感模型集成 Claude 和 Fal;数字嗅觉公司 Osmo 用 AI 实现气味「传送」
  • wpf 制作丝滑Flyout浮出侧边栏Demo (Mahapps UI框架)
  • python中应该使用while 1吗?按位运算符可以代替逻辑运算符使用吗?
  • Zookeeper分布式锁实现
  • 报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • 雷池社区版新版本功能防绕过人机验证解析
  • 如何无缝更换WordPress主题:关键步骤详解
  • 智慧工地:引领工地管理和监测的革新
  • 有代码MoSE: Modality Split and Ensemble forMultimodal Knowledge Graph Completion
  • lc 153 寻找旋转排序数组的最小值
  • keep-alive - 2024最新版前端秋招面试短期突击面试题【100道】
  • 【Ant.designpro】上传图片
  • 测试流程是什么?
  • ins账号多开被封?指纹浏览器来解决!
  • 全栈电子硬件工程师是怎样炼成的?
  • 苹果企业签名掉签有哪些原因
  • gitmakegdb
  • 生物医药产业前景如何?怎样开展生物医药产业分析?
  • 经纬恒润车载TSN网络测试仪TestBase-ATT全新上线!
  • 数组和字符串的es6新方法使用和综合案例
  • 数字身份发展趋势前瞻:身份韧性与安全
  • 筋膜枪哪个牌子好?深入探索国产筋膜枪品牌的口碑之选
  • 【Linux】- vim四种模式常见使用技巧
  • 基于Python的就业数据分析系统的设计与实现-计算机毕设 附源码 26787
  • 算法: 链表题目练习