剑指offer第五十二题
我们先来看看题目怎么说
思路与代码
思路就是动态规划。
这个详解还要过几天再更,这题还挺难的,其实
先上代码和注释
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
bool match(string str, string pattern) {
// write code here
int m=str.size(),n=pattern.size();
vector<vector<int>> dp(m+1,vector<int>(n+1));
for(int i=0;i<=m;i++){
for(int j=0;j<=n;j++){
if(j==0){
//判断是不是空正则
dp[i][j]=i==0;//两个都为空dp[0][0]为1,空枕着非空字符串为0
}
//非空,然后判断正则最后一个字符是不是*
else{
if(pattern[j-1]!='*'){
//[j-1]对应着有j-1个正则字符
if(i>0&&(str[i-1]==pattern[j-1]||pattern[j-1]=='.'))
dp[i][j]=dp[i-1][j-1];
}else{
//如果为*分为看或者不看*的作用
if(j>=2)//不看
dp[i][j]|=dp[i][j-2];
if(i>=1&&j>=2&&(str[i-1]==pattern[j-2]||pattern[j-2]=='.'))//看 需要满足一定条件
dp[i][j]|=dp[i-1][j];
}
}
}
}
return dp[m][n];
}
};