题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。
1.模式中的字符'.'表示任意一个字符
2.模式中的字符'*'表示它前面的字符可以出现任意次(包含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
数据范围:
1.str 只包含从 a-z 的小写字母;
2.pattern 只包含从 a-z 的小写字母以及字符 . 和 *,无连续的 '*';
3. 0≤str.length≤26;
4. 0≤pattern.length≤26。
dp解法
初始条件
递推公式
if
else if
if
else
else
核心代码
bool match(string str, string pattern) {
int n=str.length();
int m=pattern.length();
vector<vector<bool>> dp(n+1,vector<bool>(m+1,false));
dp[0][0]=true;
for(int j=2;j<=m;++j){
if(pattern[j-1]=='*') dp[0][j]=dp[0][j-2];
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(str[i-1]==pattern[j-1]||pattern[j-1]=='.'){
dp[i][j]=dp[i-1][j-1];
}
else if(pattern[j-1]=='*'){
if(pattern[j-2]=='.'||pattern[j-2]==str[i-1]){
dp[i][j]=dp[i][j-2]||dp[i-1][j];
}
else{
dp[i][j]=dp[i][j-2];
}
}
// else{
// dp[i][j]=false;
// }
}
}
return dp[n][m];
}