题目描述:

'.' Matches any single character.
'*' Matches zero or more of the preceding element.The matching should cover the entire input string (not partial).The function prototype should be:
bool isMatch(const char *s, const char *p)Some examples:
isMatch("aa","a") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "a*") → true
isMatch("aa", ".*") → true
isMatch("ab", ".*") → true
isMatch("aab", "c*a*b") → true

  使用字符串p来表示字符串s,看是否匹配。比如“c*a*b“可以匹配”aab“,此时第一个*表示有0个c,第二个*表示有1个a。

思路:

1, If p.charAt(j) == s.charAt(i) :  dp[i][j] = dp[i-1][j-1];
2, If p.charAt(j) == '.' : dp[i][j] = dp[i-1][j-1];
3, If p.charAt(j) == '*': here are two sub conditions:1   if p.charAt(j-1) != s.charAt(i) : dp[i][j] = dp[i][j-2]  //in this case, a* only counts as empty2   if p.charAt(i-1) == s.charAt(i) or p.charAt(i-1) == '.':dp[i][j] = dp[i-1][j]    //in this case, a* counts as multiple a or dp[i][j] = dp[i][j-1]   // in this case, a* counts as single aor dp[i][j] = dp[i][j-2]   // in this case, a* counts as empty

比如:s="aaab" , p="c*a*b"

  c * a * b
a 1 0 1 0 1
a 0 0 0 0 0
a 0 0 0 0 0
b 0 0 0 0  

代码:

package T010;public class RegularExpressionMatching {public static void main(String[] args) {System.out.println(isMatch("aab","c*a*b"));}public static boolean isMatch(String s, String p) {if (s == null || p == null) {return false;}boolean[][] dp = new boolean[s.length()+1][p.length()+1];dp[0][0] = true;for (int i = 0; i < p.length(); i++) {if (p.charAt(i) == '*' && dp[0][i-1]) {dp[0][i+1] = true;}}printArray(dp);for (int i = 0 ; i < s.length(); i++) {for (int j = 0; j < p.length(); j++) {if (p.charAt(j) == '.' || p.charAt(j) == s.charAt(i)) {dp[i+1][j+1] = dp[i][j];}if (p.charAt(j) == '*') {if (p.charAt(j-1) != s.charAt(i) && p.charAt(j-1) != '.') {dp[i+1][j+1] = dp[i+1][j-1];} else {dp[i+1][j+1] = (dp[i+1][j] || dp[i][j+1] || dp[i+1][j-1]);}}}}// printArray(dp);return dp[s.length()][p.length()];}/* * isMatch("aa","a") → false* isMatch("aa","aa") → true* isMatch("aaa","aa") → false* isMatch("aa", "a*") → true* isMatch("aa", ".*") → true* isMatch("ab", ".*") → true* isMatch("aab", "c*a*b") → true*/public static void printArray(boolean [] arr){System.out.print("printArray:");for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}System.out.println("");}public static void printArray(boolean[][] V){System.out.println("printArray:");int rows = V.length;int cols = V[0].length;for(int i=0;i<rows;i++){for(int j=0;j<cols;j++){System.out.print(V[i][j]+" ");}System.out.println("");}System.out.println("");}
}


转载于:https://www.cnblogs.com/wuchaodzxx/p/5846284.html

第10题 正则表达式匹配(动态规划)相关推荐

  1. LeetCode精讲题 10正则表达式匹配(动态规划)

    标题 题目描述 递归(超时) 动态规划 结语 题目描述 先点赞再观看.帅哥靓女养成好习惯. 10 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和'*'的正则表达 ...

  2. LeetCode题库10:正则表达式匹配——JavaScript解答

    题目描述: 给定一个字符串 (s) 和一个字符模式 §.实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ...

  3. LeetCode 10.正则表达式匹配(动态规划)

    题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '' 的正则表达式匹配. '.' 匹配任意单个字符 '' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字 ...

  4. Q10正则表达式匹配 动态规划

    原题地址 (困难题真的蛮难的,看了题解也想了好久,不是完全搞懂) 状态矩阵matrix[s_len][p_len] 初始状态,空字符是可以和空字符匹配成功的,所以[0][0]为true 第0列,由于匹 ...

  5. python编辑距离正则匹配_(C/C++学习)33.编辑距离和正则表达式匹配分析

    说明:本文主要分析关于力扣 10 题(正则表达式匹配) 和 力扣 72 题(编辑距离) 的状态方程问题(主要便于自己理解) 1.关于编辑距离的状态方程: a. 首先 DP[i][j] 为字符串 1 的 ...

  6. 算法:正则表达式匹配

    题目: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ...

  7. 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching

    LeetCode 10. Regular Expression Matching 本博客参考:http://www.cnblogs.com/grandyang/p/4461713.html 详细解析见 ...

  8. [动态规划] leetcode 10 正则表达式匹配

    [动态规划] leetcode 10 正则表达式匹配 1.题目 题目链接 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 ...

  9. 通配符?子字符串匹配主字符串次数_突破LeetCode,拿BAT大厂offer之《正则表达式匹配》(动态规划)...

    导读:算法哥前面分享了一个<通配符匹配>,有粉丝留言,算法哥你再讲讲leetcode上另一道<正则表达式匹配>,正则表达式匹配这道题是前面通配符匹配的加强版,大家一起来学习吧! ...

  10. 10、正则表达式 (笔试题、语法规则、正则对象方法、正则实例属性、支持正则表达式的String对象的方法、贪婪匹配与非贪婪匹配)

    正则表达式 目录 10.1 语法规则 10.1.1 创建方法 1.直接量 2.构造方法RegExp() 10.1.2 三个属性i,g,m 10.1.3 方括号 10.1.4 元字符 10.1.5 量词 ...

最新文章

  1. C++ 函数的模板的使用
  2. PTA数据结构与算法题目集(中文)7-12
  3. PTA 基础编程题目集 7-19 支票面额 C语言
  4. 关于子元素的margin-top对父级容器无效
  5. github 笔记
  6. 联想笔记本进入pe_联想笔记本bios怎么设置U盘启动|legacy和uefi双引导模式启动
  7. linux用unzip解压.zip文件失败解决方案
  8. java中的servlet是线程安全的嘛_Java面试题:Servlet是线程安全的吗?(转)
  9. kudu大量数据更新_i2Stream提升异构数据库数据的互联互通
  10. Angular 内容投影 content projection 的一个问题的单步调试
  11. 注解@resource的作用_Bean基于Annotation(注解)的装配方式
  12. 终端中用命令成功修改linux~Ubuntu PATH环境变量
  13. java反射获取实体类_java 反射获取类对象的三种方式
  14. chattr使用解释
  15. 基于php的超市仓库管理系统
  16. 关务+物流领域的技术发展路线
  17. Linux下SD卡驱动移植
  18. gitlab 注册runner
  19. centos7 安装wekan 看板
  20. 项目配置文件----.eslintignore,eslint在做风格检查的时候忽略 dist 和 vender(第三方库) 不去检查。

热门文章

  1. java abs是什么意思_java math.abs
  2. kubernetes视频教程笔记 (37)-部署 EFK 平台 日志收集 展示
  3. 微信小程序云开发教程-WXSS入门-样式的使用
  4. oracle反生异常会回滚吗,Oracle transaction rollback 事务异常回滚问题分析
  5. Unity AssetsBundle
  6. 回溯策略的汉诺塔问题
  7. 执行计划有时不准确_一张表格,帮助学生制定良好每日学习计划,提升学习积极性主动性...
  8. LINUX Centos7利用七牛空间做定时备份 qshell定时备份,定时上传到七牛空间
  9. Android 控件之 Date Time 组件
  10. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_8、SpringBoot基础HTTP接口GET请求实战...