给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。
‘.’ 匹配任意单个字符
‘*’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
class Solution {
public:
bool isMatch(string s, string p) {
if(s.size()==0 && p.size()==0) return true;
else if(p.size()==0) return false;
bool flag=(s.size() != 0)&&(s[0]==p[0] || p[0]=='.');
if(p.size()>1 && p[1]=='*'){
return isMatch(s,p.substr(2)) || (flag && isMatch(s.substr(1),p));
}
return flag&&isMatch(s.substr(1),p.substr(1));
}
};
class Solution {
public:
bool isMatch(string s, string p) {
s=" "+s;//定义dp数组时防止s,p都为空
p=" "+p;
int m=s.size();int n=p.size();
vector<vector<bool>> dp(m+1, vector<bool>(n+1, false));
dp[0][0]=true;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(s[i-1]==p[j-1]||p[j-1]=='.'){
dp[i][j]=dp[i-1][j-1];
}else if(p[j-1]=='*'){
if(s[i-1]==p[j-2]||p[j-2]=='.'){
dp[i][j]=dp[i][j-1]||dp[i][j-2]||dp[i-1][j];
}else{
dp[i][j]=dp[i][j-2];
}
}else{
dp[i][j]=false;
}
}
}
return dp[m][n];
}
};