10. 正则表达式匹配
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
class Solution { public: bool isMatch(string s, string p) { int m = s.size(),n = p.size(); if(m == 0 && n == 0) return true; //简化问题 s = '$'+s; p = '$'+p; bool dp[m+1][n+1]; memset(dp,0,sizeof dp); dp[0][0] = 1; for(int i = 0; i <=m; i++) //空字符串也可能,所以要从0开始遍历,所以下面出现i-1的时候都要判断i for(int j = 1; j <= n; j++){ if(p[j] == '.' || p[j] == s[i]) dp[i][j] |= i && dp[i-1][j-1]; if(p[j] == '*'){ if(j >=1 && (p[j-1] == s[i] || p[j-1] == '.')) dp[i][j] |= i && (dp[i-1][j-1] // *等于第i个字符,*去掉 || dp[i-1][j]);// *等于第i个字符,*还在 //*代表0次 if(j>=2) dp[i][j] |= dp[i][j-2]; } //cout << i << ' ' << j << ' ' << dp[i][j] << endl; } return dp[m][n]; } };