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

leecode 44. 通配符匹配

leecode 44. 通配符匹配

题目描述

给你一个输入字符串 (s) 和一个字符模式 § ,请你实现一个支持 ‘?’ 和 ‘’ 匹配规则的通配符匹配:
‘?’ 可以匹配任何单个字符。
'
’ 可以匹配任意字符序列(包括空字符序列)。
判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而不是部分匹配)。

思路

step1:开辟一个二维数组,标志是不是一样
std::vector<std::vector>dp(m+1,vector(n+1)); m表示输入字符串s的大小,n表示的是字符模式字符串的大小。
step2:遍历 字符模式p的串,如果其是 * 的话,则肯定是true

for(int i = 1; i <=n ; ++i) {
           if(p[i-1] != '*') {
                break;
           }
           dp[0][i] = true;
} 

step3:
3.1 若当前模式串是* 的话,则需要看前一个或者 上斜一个的状态。因为上斜一个表示前一个的匹配状态。 前一个是为兼容 ✳,因为它可以匹配多个。
3.2 若当前不是*的话,若当前是? 号的话,或者于对应位置的s串相同的话,则它的状态= 上斜一个(前一个)的状态 。
3.3 终点即是最后是不是一样的结果,也就是dp[m][n];

代码

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

http://www.kler.cn/a/381492.html

相关文章:

  • mybatis-plus 用法总结
  • Pytorch | 利用VA-I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • 【畅购商城】校验用户名、手机号以及前置技术Redis和阿里大鱼短信验证码
  • 18_HTML5 Web IndexedDB 数据库 --[HTML5 API 学习之旅]
  • 洛谷 P1725:琪露诺 ← 单调队列+DP
  • Spring5.1.3 @Autorwired注解原理重新回顾
  • 重学Android:自定义View基础(一)
  • Linux高阶——1103—修改屏蔽字信号到达及处理流程时序竞态问题
  • 微信小程序中,点击视频,没有跳转播放,可能是因为没有在app.json中正确注册视频播放页面的路径
  • 聊一聊Elasticsearch的索引的分片分配机制
  • 基于 Encoder-only 架构的大语言模型
  • 后台管理系统的通用权限解决方案(十二)数据模型、基于SpringCloud和Nacos的后端项目搭建
  • Python数据分析NumPy和pandas(二十三、数据清洗与预处理之五:pandas的分类类型数据)
  • java 中List 的使用
  • Vue:事件
  • MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附下载链接
  • 根据某个字段禁用el-table里的checkbox
  • 纯前端实现在线预览excel文件(插件: LuckyExcel、Luckysheet)
  • 洛谷月赛 11.1题解
  • Android 15 在状态栏时间中显示秒数
  • 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
  • oracle如何创建两个数据库,以及如何用navicat连接,监听、数据泵
  • 定位new的表达式
  • 数据结构和算法入门
  • 【ORACLE】对Oracle中char类型的研究分析
  • 歌者PPT又添新功能——AI无损排版上线!