要利用递推性质,将最后一个表达式优化成如下形式:
转移方程的推导,转移方程的化简
class Solution {
public:
bool isMatch(string s, string p) {
s = ' '+s, p = ' '+p; // 最开头放入一个哨兵,避免边界
int n = s.size(), m = p.size();
vector<vector<bool>> dp(n,vector<bool>(m,false));
dp[0][0] = true;
for(int i=0;i<n;i++){
for(int j=1;j<m;j++){
if(i&&(s[i]==p[j]||p[j]=='.')) dp[i][j] = dp[i-1][j-1];
else if(p[j]=='*'){
dp[i][j] = dp[i][j-2] || (i&&dp[i-1][j]&& (s[i]==p[j-1] || p[j-1] == '.'));
}
}
}
return dp[n-1][m-1];
}
};