当前位置: 首页 > 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

相关文章:

  • 跳蚤市场之商品发布功能
  • 智能AI合同审查系统如何优化合同风险管理的案例解读
  • 【MySQL】 运维篇—故障排除与性能调优:案例分析与故障排除练习
  • Kafka在大数据处理中的作用及其工作原理
  • Hive自定义函数—剔除周日周六(小时级别)
  • ElasticSearch学习篇16_《检索技术核心20讲》进阶篇之空间检索
  • 重学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无损排版上线!