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

30 剑指offer-动态规划求正则表达式匹配

问题描述:请实现一个函数用来匹配包含'.'和'*'的正则表达式,模式中的字符'.'表示任意一个字符,而‘*’表示它前面的字符可以出现任意次(含0次),在本题中,匹配是指字符串的所有字符匹配整个模式
例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是"aa.a"和"ab*a"均不匹配

"aaa"与"a*"匹配

动态规划求解:定义两个字符串a和b,a是字符串,b是匹配模式,定义dp[i][j]为字符串的前i个字符是否与模式的前j个字符相匹配。如果都是字符若如果对应位置相等,则dp[i][j]=dp[i-1][j-1],如果b[j]位置为'.'则dp[i][j]=dp[i-1][j-1],如果b[j]位置为'*'则判断dp[i][j]=dp[i][j-2](消除前一个,如果为真需要continue),则需要判断dp[i-1][j]是否为真,若为真还需要保证dp[i-1][j-2]为false,保证这个‘*’并没有消除。否者不为真。

public Boolean isMatch(String a,String b)
{
Boolean dp[][]=new Boolean[a.length()+1][b.length()+1];
dp[0][0]=true;
for(int i=1;i<a.length();i++)
{
for(int j=1;j<b.length();j++)
{
//如果两者相等或模式匹配等于'.'则正确性与前面的元素一致只要匹配其一即可
if(a.charAt(i-1)==b.charAt(j-1)||b.charAt(j-1)=='.')
{
dp[i][j]=dp[i-1][j-1];
//在不满足条件一的情况下,如果模式匹配为'*'
}else if(b.charAt(j-1)=='*')
{
//看是否能消去模式匹配的前两个从而达到匹配的目的
if(dp[i][j-2])
{
dp[i][j]=dp[i][j-1];
//如果不能消去则判断是否任意匹配的问题,需要保证*有效用,则dp[i-1][j-2]必须为false
}else if((a.charAt(i-1)==a.charAt(i-2))&&dp[i-1][j-2]==false&&dp[i-1][j]==true)
{
//否则均为false
dp[i][j]=true;
}else
{
dp[i][j]=false;
}
}else
{
dp[i][j]=false;
}
}
}
return dp[a.length()][b.length()];
}

相关文章:

  • 第九天:信息打点-CDN绕过篇amp;漏洞回链amp;接口探针amp;全网扫描amp;反向邮件
  • 数据结构和算法专题---2、算法思想
  • 把 Windows 11 装进移动硬盘:Windows 11 To Go
  • UDP协议实现群聊
  • C++ 多态性(Polymorphism)和 虚函数(Virtual Functions)
  • Kubernetes里的DNS;API资源对象ingress;Kubernetes调度;节点选择器NodeSelector;节点亲和性NodeAffinity
  • 五:爬虫-数据解析之xpath解析
  • 【C++】简单工厂模式
  • C++STL的string(超详解)
  • 大量 SVG 图标在 React 中的极速集成与应用
  • MySQL概述-安装与启动
  • P1317 低洼地题解
  • 【Flutter】vs2022上开发flutter
  • 免费的SEO外链发布工具,提升排名的利器
  • 63. 不同路径 II
  • HTTP--网络协议分层,http历史(二)
  • JavaScript新鲜事·第5期
  • java正则表式的使用
  • js写一个简单的选项卡
  • markdown编辑器简评
  • php中curl和soap方式请求服务超时问题
  • Vim Clutch | 面向脚踏板编程……
  • 基于 Babel 的 npm 包最小化设置
  • 你真的知道 == 和 equals 的区别吗?
  • 如何利用MongoDB打造TOP榜小程序
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深度学习在携程攻略社区的应用
  • 思否第一天
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • ​​​【收录 Hello 算法】9.4 小结
  • ​Java并发新构件之Exchanger
  • ​卜东波研究员:高观点下的少儿计算思维
  • !!java web学习笔记(一到五)
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (1)Nginx简介和安装教程
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)字符分类函数
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (PADS学习)第二章:原理图绘制 第一部分
  • (windows2012共享文件夹和防火墙设置
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (四)进入MySQL 【事务】
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .gitignore文件使用
  • .Mobi域名介绍
  • .Net mvc总结
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • /run/containerd/containerd.sock connect: connection refused
  • @NotNull、@NotEmpty 和 @NotBlank 区别
  • @Service注解让spring找到你的Service bean
  • [@Controller]4 详解@ModelAttribute
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器