10. Regular Expression Matching
来源:互联网 发布:pg报丧女妖网络限定 编辑:程序博客网 时间:2024/05/16 08:27
题意:Implement regular expression matching with support for ‘.’ and ‘*’.
'.' 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") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → true
思路:这题有几个地方需要注意的,首先是声明DP数组时,可以多开一行一列的空间,但是要注意,第0行相当于是用空的字符串作为s,这个需要处理,第0列的话直接赋全0就好,另外的结果大致分为三类,根据Solutions的解释:
1、P[i][j] = P[i - 1][j - 1], if p[j - 1] != '*' && (s[i - 1] == p[j - 1] || p[j - 1] == '.');2、P[i][j] = P[i][j - 2], if p[j - 1] == '*' and the pattern repeats for 0 times;3、P[i][j] = P[i - 1][j] && (s[i - 1] == p[j - 2] || p[j - 2] == '.'), if p[j - 1] == '*' and the pattern repeats for at least 1 times.
注意其中p[j-1]代表的是当前项,所以对于1来说就是s和p的对应项相等,则状态由前一状态决定,对于p[j-1]==’*’时,分为两类,一类是s=ac, p=a *c,另一类是s=aab, p=a *b或 . *b即可,下面的代码也是Solutions里的。
class Solution {public: bool isMatch(string s, string p) { int m = s.length(), n = p.length(); vector<vector<bool> > dp(m + 1, vector<bool> (n + 1, false)); dp[0][0] = true; for (int i = 0; i <= m; i++) for (int j = 1; j <= n; j++) if (p[j - 1] == '*') dp[i][j] = dp[i][j - 2] || (i > 0 && (s[i - 1] == p[j - 2] || p[j - 2] == '.') && dp[i - 1][j]); else dp[i][j] = i > 0 && dp[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '.'); return dp[m][n]; }};
0 0
- 10. Regular Expression Matching
- 10.Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- 10. Regular Expression Matching
- Shell编程之控制结构if
- 【Web】理解jquery的$.extend()、$.fn和$.fn.extend()
- Linux+php+apache+oracle环境搭建之CentOS下源码编译安装PHP
- swift 类似微信朋友圈聊天界面
- PHP+Apache+mysql
- 10. Regular Expression Matching
- webstorm快捷键-自整理版
- 百度投资医疗行业,编制很多的虚假的疾病,关押了很多的正常人,让我错看了百度 怀念
- Proteus仿真AT89C52——双机通讯
- Oracel——创建表空间
- 总结篇:大型网站技术架构-性能(一)
- POJ 3729 Facer's string (后缀数组)
- 第三天总结
- hdu1394 Minimum Inversion Number