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

【打卡】牛客网:BM76 正则表达式匹配

模板的:

关键思想是:

当pattern遇到*时,需要考虑两种情况:

  1. str的当前字符和pattern的*前的字符相同,例如str=“ab”,pattern=“abb*”,“b”和“b*”相同,有两种情况可以选择:
    1. pattern的“b*”发挥作用,即去掉str的当前字符,即考虑“a”和“abb*”。 //易错,不是考虑“a”和“ab”
    2. pattern的“b*”不发挥作用,即不去掉str的当前字符,即考虑“ab”和“ab”。
  2. str的当前字符和pattern的*前的字符不同,只有一种情况:
    1. “ac”和“ab*”的“c”和“b*”不同,“b*”不发挥作用,即不去掉str的当前字符,即考虑“ac”和“a”。

没有遇到*时,正常递归:

  1. 二者的当前字符相同,考虑二者的之前的,即dp[i][j]=dp[i-1][j-1];
  2. 二者的当前字符不相同,直接str不符合pattern,dp[i][j]=false;

此外,pattern还有“.”的匹配方式。“.”必须考虑一个字符,所以与判断字符相同的过程一样,即在上述过程中判断条件中“相同”改成“相同或匹配”即可。

初始化问题:

  1. pattern为空字符串,全部false
  2. str为空字符串,只有当pattern是【随意一个字符+*】,或者是任意个【随意一个字符+*】的组合时,dp为true。程序中的写法比较巧妙。

我的是dp[n2][n1]。

我习惯把pattern放在列(n2的for循环放在外面),str放在行(n1的for循环放在里面)。

然后对于每一个pattern元素,遍历所有str元素。

模板的是dp[n1][n2],对于每一个str元素,遍历所有pattern元素。结果都一样。

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param str string字符串 * @param pattern string字符串 * @return bool布尔型*/bool match(string str, string pattern) {// write code hereint n1 = str.length();int n2 = pattern.length();vector<vector<bool>> dp(n2+1,vector<bool>(n1+1,false));dp[0][0] = true;for(int j = 1; j <= n2; j++)if(pattern[j-1] == '*')dp[j][0] = dp[j-2][0];for(int j = 1; j <= n2; j++)for(int i = 1; i <= n1; i++){if(pattern[j-1] == '*')if(pattern[j-2] == str[i-1] || pattern[j-2] == '.')dp[j][i] = dp[j][i-1] || dp[j-2][i];  //满足其一即可elsedp[j][i] = dp[j-2][i];elseif(pattern[j-1] == str[i-1] || pattern[j-1] == '.')dp[j][i] = dp[j-1][i-1];}return dp[n2][n1];}
};

相关文章:

  • 京东年度数据报告-2023全年度游戏本十大热门品牌销量(销额)榜单
  • 如何自动化部署和发布系统?
  • NLP论文阅读记录 - 2021 | WOS 使用深度强化学习及其他技术进行自动文本摘要
  • 什么是信噪比
  • k8s实战从入门到上天系列第一篇:K8s微服务实战内容开篇介绍
  • ApolloCarla联合仿真基本操作
  • k8s--集群调度(kube-scheduler)
  • 无人机群ros通信
  • Pyside6/PyQt6中的QTimer类:轻松实现定时任务
  • vue3.2引用unplugin-vue-components插入,解放开发中import组件
  • spring Security源码讲解-Sevlet过滤器调用springSecurty过滤器的流程
  • 案例学Python:filter()函数的用法,高级!
  • Java 并发性和多线程3
  • Leetcode刷题(二十四)
  • Android SDK环境搭建[图解]; 解决问题Done. Nothing was installed.
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Flannel解读
  • Hibernate最全面试题
  • nodejs:开发并发布一个nodejs包
  • Python_OOP
  • Web标准制定过程
  • 基于web的全景—— Pannellum小试
  • 基于游标的分页接口实现
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 算法-图和图算法
  • 回归生活:清理微信公众号
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​决定德拉瓦州地区版图的关键历史事件
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #13 yum、编译安装与sed命令的使用
  • (27)4.8 习题课
  • (ibm)Java 语言的 XPath API
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (学习日记)2024.01.19
  • (转)socket Aio demo
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .gitignore文件—git忽略文件
  • .NET 5种线程安全集合
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET中winform传递参数至Url并获得返回值或文件
  • .Net组件程序设计之线程、并发管理(一)
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Pointcut 使用
  • [ C++ ] STL---stack与queue
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [1525]字符统计2 (哈希)SDUT
  • [20171102]视图v$session中process字段含义
  • [Android] Implementation vs API dependency
  • [Android] Upload package to device fails #2720
  • [C#][DevPress]事件委托的使用
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [c#基础]DataTable的Select方法