老大难问题,终于算是理解了。
首先状态定义不难写(哈哈):
dp[i][j]: s[0->i-1] p[0->j-1],它们是不是符合。
难的是状态转移方程(又一次验证):
1.如果s[i-1]== p[j-1] || p[j-1] == ‘.’, dp[i][j] = dp[i-1][j-1]
2.如果p[j-1] == '*'并且重复0次,那么dp[i][j] = dp[i][j-2]
3.如果p[j-1] == '*'并且重复至少一次,那么dp[i][j] = dp[i-1][j] && (s[i-1] == p[j-2] || p[j-2] == ‘.’)

比较难以理解的是3,这里尝试解释一下:
s: 0, 1, …, i-2, i-1
p: 0, 1, …, j-2, j-1
此时p[j-1]==’’,如果这个 * 重复至少一次,就说明1.s[i-1] == p[j-2] || p[j-2] == '.‘是需要的 2.看的是dp[i-1][j],而不是dp[i-1][j-1],因为如果只看dp[i-1][j-1]的话,那么就说明这个’'只重复了一次,但是这里需要包含不止一次的情况,所以要看dp[i-1][j]。而且dp[i-1][j]表示的是这个*重复了0 次或者多次,所以在加上这里的s[i-1],就表示1次或者更多。

class Solution {
public:bool isMatch(string s, string p) {int ssz = s.size(), psz = p.size();vector<vector<bool>> dp(ssz+1, vector<bool>(psz+1, false));dp[0][0] = true;for (int j = 1; j <= psz; ++j)if (p[j-1] == '*' && dp[0][j-2])dp[0][j] = true;for (int i = 1; i <= ssz; ++i)for (int j = 1; j <= psz; ++j) {if (p[j-1] == '*')dp[i][j] = dp[i][j-2] || (dp[i-1][j] && (s[i-1] == p[j-2] || p[j-2] == '.'));else dp[i][j] = dp[i-1][j-1] && (s[i-1] == p[j-1] || p[j-1] == '.');}return dp.back().back();}
};

另外这题比较坑爹的是题目没有说明不会出现一些边角情况:比如:
*不会出现在开头
*不会连续出现
容易导致想复杂了

LeetCode:10. Regular Expression Matching相关推荐

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

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

  2. LeetCode 10. Regular Expression Matching / 44. Wildcard Matching

    10. Regular Expression Matching 经典DP题目,比较复杂,需要多复习. dp[i][j] 表示 s 下标0~i,p 下标0~j 是否能够匹配   dp[i-1][j-1] ...

  3. leetcode 10 Regular Expression Matching

    题目连接 https://leetcode.com/problems/regular-expression-matching/ Regular Expression Matching Descript ...

  4. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  5. LeetCode 10 Regular Expression Matching(字符串匹配)

    题目链接 https://leetcode.com/problems/regular-expression-matching/?tab=Description   '.' Matches any si ...

  6. 【LeetCode】10. Regular Expression Matching

    题目: Implement regular expression matching with support for '.' and '*'. '.' Matches any single chara ...

  7. Leetcode Q10: Regular Expression Matching

    题目10: (该题目拿到手没什么特别好的思路,从网上看的别人的解法,然后写了下自己的理解,需要常回顾) Implement regular expression matching with suppo ...

  8. Regular Expression Matching

    正则匹配 Regular Expression Matching Implement regular expression matching with support for '.' and '*'. ...

  9. Q10 Regular Expression Matching

    Given an input string (s) and a pattern §, implement regular expression matching with support for '. ...

最新文章

  1. Java B2B2C o2o多用户商城 springcloud架-企业云架构common-service代码结构分析
  2. 互联网+创新时代,“智慧工地”助力武汉城市建设!
  3. 数据工厂 mysql_.net中利用数据工厂实现多数据库的操作
  4. Winform中自定义ZedGraph右键复制成功后的提示
  5. java调用c写的dll jna_jna调用c编写的dll
  6. ABAP Development Tool 代码模板和其他一些实用技巧汇总
  7. “换标”Intel的穷则思变
  8. nodejs的PM2进程管理
  9. Maven generate/构建项目太慢解决方法
  10. 第五十三天 how can I 坚持
  11. 首个在线教学中文预训练模型TAL-EduBERT
  12. java关键词 英文原文解释,javadoc注释规范(国外英文资料).doc
  13. gsp计算机系统系统操作培训,gsp计算机系统操作PPT.ppt
  14. Redisson分布式调度任务小栗子
  15. js 实现在线考试切屏代码
  16. Arduino Uno 实验15——MQ-135 气体传感器模块
  17. sobel算子 拉普拉斯算子以及散度与梯度的概念
  18. 鸿蒙系统能玩魔兽世界吗,《魔兽世界》7.0配置公布:仍不放弃XP
  19. 从基础特质初判一个产品经理潜质
  20. HDU 4408 Minimum Spanning Tree 最小生成树计数

热门文章

  1. php病毒源代码,病毒程序源码实例剖析-CIH病毒[2]
  2. 下载网页视频简单的办法之一
  3. 【JS】事件详解(使用手册)
  4. 论文阅读Neural Machine Reading Comprehension: Methods and Trends
  5. jsp管理系统页面模板_页面静态化如何实现
  6. 片袖原型制图_服装工艺八种袖子原型的制图画法
  7. 如何将带GPS的网络化的软件定义无线电接收机应用于分布式和移动频谱监测?(一)
  8. Python基础必掌握的语法结构详解
  9. 博弈论知识汇总(算法)
  10. 2022年海南最新建筑八大员(标准员)模拟考试试题及答案