LeetCode:10. Regular Expression Matching
老大难问题,终于算是理解了。
首先状态定义不难写(哈哈):
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相关推荐
- 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching
LeetCode 10. Regular Expression Matching 本博客参考:http://www.cnblogs.com/grandyang/p/4461713.html 详细解析见 ...
- 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] ...
- leetcode 10 Regular Expression Matching
题目连接 https://leetcode.com/problems/regular-expression-matching/ Regular Expression Matching Descript ...
- LeetCode 10. Regular Expression Matching python特性、动态规划、递归
前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...
- LeetCode 10 Regular Expression Matching(字符串匹配)
题目链接 https://leetcode.com/problems/regular-expression-matching/?tab=Description '.' Matches any si ...
- 【LeetCode】10. Regular Expression Matching
题目: Implement regular expression matching with support for '.' and '*'. '.' Matches any single chara ...
- Leetcode Q10: Regular Expression Matching
题目10: (该题目拿到手没什么特别好的思路,从网上看的别人的解法,然后写了下自己的理解,需要常回顾) Implement regular expression matching with suppo ...
- Regular Expression Matching
正则匹配 Regular Expression Matching Implement regular expression matching with support for '.' and '*'. ...
- Q10 Regular Expression Matching
Given an input string (s) and a pattern §, implement regular expression matching with support for '. ...
最新文章
- Java B2B2C o2o多用户商城 springcloud架-企业云架构common-service代码结构分析
- 互联网+创新时代,“智慧工地”助力武汉城市建设!
- 数据工厂 mysql_.net中利用数据工厂实现多数据库的操作
- Winform中自定义ZedGraph右键复制成功后的提示
- java调用c写的dll jna_jna调用c编写的dll
- ABAP Development Tool 代码模板和其他一些实用技巧汇总
- “换标”Intel的穷则思变
- nodejs的PM2进程管理
- Maven generate/构建项目太慢解决方法
- 第五十三天 how can I 坚持
- 首个在线教学中文预训练模型TAL-EduBERT
- java关键词 英文原文解释,javadoc注释规范(国外英文资料).doc
- gsp计算机系统系统操作培训,gsp计算机系统操作PPT.ppt
- Redisson分布式调度任务小栗子
- js 实现在线考试切屏代码
- Arduino Uno 实验15——MQ-135 气体传感器模块
- sobel算子 拉普拉斯算子以及散度与梯度的概念
- 鸿蒙系统能玩魔兽世界吗,《魔兽世界》7.0配置公布:仍不放弃XP
- 从基础特质初判一个产品经理潜质
- HDU 4408 Minimum Spanning Tree 最小生成树计数
热门文章
- php病毒源代码,病毒程序源码实例剖析-CIH病毒[2]
- 下载网页视频简单的办法之一
- 【JS】事件详解(使用手册)
- 论文阅读Neural Machine Reading Comprehension: Methods and Trends
- jsp管理系统页面模板_页面静态化如何实现
- 片袖原型制图_服装工艺八种袖子原型的制图画法
- 如何将带GPS的网络化的软件定义无线电接收机应用于分布式和移动频谱监测?(一)
- Python基础必掌握的语法结构详解
- 博弈论知识汇总(算法)
- 2022年海南最新建筑八大员(标准员)模拟考试试题及答案