字符串匹配无非两种思路,
dfs可能会爆栈,但可以解决很多匹配,
dp时间复杂度小,但有些问题不能解决。
class Solution {
public:
bool isMatch(string s, string p) {
int N = p.length();
int M = s.length();
int dp[N+1][M+1];
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i=0;i<N;i++)
if(p[i] == '*') dp[i+1][0] = 1;
else break;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
if(p[i-1] == '?' && dp[i-1][j-1]) dp[i][j] = 1;
if(p[i-1] == '*' && (dp[i-1][j] || dp[i][j-1] || dp[i-1][j-1]) ) dp[i][j] = 1;
if(p[i-1] == s[j-1] && dp[i-1][j-1]) dp[i][j] =1;
}
}
return dp[N][M] == 1;
}
};