leetcode Regular Expression Matching
2013-11-16 13:04
495 查看
Implement regular expression matching with support for
[/code]
Take notice that
dp[i - 2][j - 1] || dp[i][j - 1]
Can't be written as
dp[i - 2][j - 1]
For exmaple, "aa"
and "a*"
recursive:
[/code]
Give a wrong code, find out the differences:
'.'and
'*'.
'.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire>
[code]class Solution { public: bool isMatch(const char *s, const char *p) { int slen = strlen(s), plen = strlen(p), i, j; bool dp[500][500]; memset(dp,false, sizeof(dp)); dp[0][0] = true; for (i = 1; i <= plen; ++i) { if (p[i] == '*') { dp[i][0] = dp[i + 1][0] = dp[i - 1][0]; for (j = 1; j <= slen; ++j) dp[i][j] = dp[i + 1][j] = (dp[i][j - 1] && (p[i - 1] == s[j - 1] || p[i - 1] == '.') || dp[i - 1][j]); ++i; } else for (j = 1; j <= slen; ++j) dp[i][j] = dp[i - 1][j - 1] && (p[i - 1] == s[j - 1] || p[i - 1] == '.'); } return dp[plen][slen]; } };
[/code]
OR
class Solution { public: bool isMatch(const char *s, const char *p) { const char *ss = s, *sbegin = s, *pbegin = p, *pp = p; bool dp[500][500]; memset(dp, false, sizeof(dp)); int slen = strlen(s), plen = strlen(p), i, j; dp[0][0] = true; for (i = 1; i <= plen; ++i) { if (p[i - 1] == '*') dp[i][0] = dp[i - 1][0] = dp[i - 2][0]; for (j = 1; j <= slen; ++j) { if (p[i - 1] == '*') dp[i][j] = dp[i - 1][j] = ((dp[i - 2][j - 1] || dp[i][j - 1]) && (p[i - 2] == s[j - 1] || p[i - 2] == '.')) || dp[i - 2][j]; else dp[i][j] = dp[i - 1][j - 1] && (p[i - 1] == s[j - 1] || p[i - 1] == '.'); } } return dp[plen][slen]; } };
Take notice that
dp[i - 2][j - 1] || dp[i][j - 1]
Can't be written as
dp[i - 2][j - 1]
For exmaple, "aa"
and "a*"
recursive:
[code]class Solution { public: bool isMatch(const char *s, const char *p) { if (*p == '\0') return *s == '\0'; if (*(p + 1) == '*') { for (const char *str = s; (*str == *p || *p == '.' && *str); ++str) if(isMatch(str + 1, p + 2)) return true; return isMatch(s, p + 2); } else return (*p == *s || *p == '.' && *s) && isMatch(s + 1, p + 1); } };
[/code]
Give a wrong code, find out the differences:
class Solution { public: bool isMatch(const char *s, const char *p) { if (*s == *p && *s == '\0') return true; if (*(p + 1) == '*') { for (const char *str = s; *str == *p || *p == '.' || *str == *s; ++str) if (isMatch(str, p + 2)) return true; return false; } else return (*p == *s || *p == '.') && isMatch(s + 1, p + 1); } };
相关文章推荐
- LeetCode 10 Regular Expression Matching
- python写算法题:leetcode: 10. Regular Expression Matching
- leetcode: Regular Expression Matching
- leetcode解题报告:10 Regular Expression Matching
- leetcode题解c++ | 10. Regular Expression Matching
- Leetcode-Regular Expression Matching
- leetcode 第10题 Regular Expression Matching
- Leetcode: 10. Regular Expression Matching
- [leetcode] Regular Expression Matching
- leetcode-10 Regular Expression Matching
- 判断正则表达式是否匹配 Regular Expression Matching @LeetCode
- LeetCode | Regular Expression Matching
- leetcode 10 -- Regular Expression Matching
- 140_leetcode_Regular Expression Matching
- LeetCode 10: Regular Expression Matching
- LeetCode--Regular Expression Matching
- Regular Expression Matching - LeetCode
- [Leetcode 10, Hard] Regular Expression Matching
- leetcode — regular-expression-matching
- [LeetCode] Regular Expression Matching - Recursively