状态表示:
状态转移方程:
初始化:
填表顺序:
根据状态转移方程,从左到右,从上往下
返回值:
返回dp[m][n]
代码:
class Solution {
public boolean isMatch(String ss, String pp) {
int m = ss.length(); int n = pp.length();
ss = " " + ss; pp = " " + pp;
char[] s = ss.toCharArray();
char[] p = pp.toCharArray();
boolean[][] dp = new boolean[m+1][n+1];
//初始化
dp[0][0] = true;
for(int i = 2; i <= n; i+=2){
if(p[i] == '*') dp[0][i] = true;
else break;
}
//填表
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++){
if(p[j] == '*')
dp[i][j] = dp[i][j-2] || (p[j-1] == '.' || p[j-1] == s[i]) && dp[i-1][j];
else
dp[i][j] = (p[j] == s[i] || p[j] == '.') && dp[i-1][j-1];
}
return dp[m][n];
}
}