代码:
class Solution {
public:
bool isMatch(string s, string p) {
vector<vector<bool>> dp (s.size()+1, vector<bool>(p.size()+1, false));
dp[0][0] = true;
for(int j = 2; j <= p.size();j++)
{
if(p[j-1] == '*')
dp[0][j] = dp[0][j-2];
}
for(int i = 1; i <= s.size();i ++)
{
for(int j = 1; j <= p.size(); 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(p[j-2] == s[i-1] ||p[j-2] =='.') dp[i][j] = dp[i-1][j] || dp[i][j-2];
else dp[i][j] = dp[i][j-2];
}
}
}
return dp[s.size()][p.size()];
}
};
思路:
1.需要初始化dp数组,当p数组有值,s数组没值时也有可能返回true。
2.这里的下标有点乱,优化得不好,后期可以改一改。