[LeetCode #10] Regular Expression Matching
2016-10-01 21:35 amadis 阅读(131) 评论(0) 编辑 收藏 举报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") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "a*") → true isMatch("aa", ".*") → true isMatch("ab", ".*") → true isMatch("aab", "c*a*b") → true
1 class Solution { 2 public: 3 bool isMatch(string s, string p) { 4 int m = s.size(), n = p.size(); 5 6 vector<vector<bool>> dp (m+1, vector<bool> (n+1, false)); 7 8 dp[0][0] = true; 9 10 for (int i = 0; i < m; i++){ 11 dp[i+1][0] = false; 12 } 13 14 for (int j = 0; j < n; j++){ 15 dp[0][j+1] = j > 0 && p[j] == '*' && dp[0][j-1]; 16 } 17 18 for (int i = 0; i < m; i++){ 19 for (int j = 0; j < n; j++){ 20 if (p[j] != '*'){ 21 dp[i+1][j+1] = dp[i][j] && (s[i] == p[j] || p[j] == '.'); 22 }else{ 23 dp[i+1][j+1] = dp[i+1][j-1] || ((dp[i][j+1]) && (s[i] == p[j-1] || p[j-1] == '.')); 24 } 25 } 26 } 27 28 return dp[m][n]; 29 } 30 };