Leetcode 10. Regular Expression Matching (Hard) (cpp)

来源:互联网 发布:林弯弯的淘宝店外套 编辑:程序博客网 时间:2024/05/22 06:49

Leetcode 10. Regular Expression Matching (Hard) (cpp)

Tag: Dynamic Programming, Backtracking, String

Difficulty: Hard


/*10. Regular Expression Matching (Hard)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*/class Solution {public:bool isMatch(string s, string p) {int m = s.size(), n = p.size();vector<vector<bool>> t(m + 1, vector<bool>(n + 1, false));t[0][0] = true;for (int i = 1; i <= m; i++) {t[i][0] = false;}for (int j = 1; j <= n; j++) {t[0][j] = j > 1 && '*' == p[j - 1] && t[0][j - 2];}for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (p[j - 1] != '*') {t[i][j] = t[i - 1][j - 1] && (s[i - 1] == p[j - 1] || '.' == p[j - 1]);}else {t[i][j] = t[i][j - 2] || (s[i - 1] == p[j - 2] || '.' == p[j - 2]) && t[i - 1][j];}}}return t[m][n];}};



0 0
原创粉丝点击