我们研究时的范围到i,j,要推及到整个范围,所以返回dp[m][n]
class Solution {
public boolean isInterleave(String ss1, String ss2, String ss3) {
int m = ss1.length(),n = ss2.length(),k = ss3.length();
ss1 = " "+ ss1; ss2 = " "+ ss2; ss3 = " " + ss3;
if(m + n != k) return false;
char[] s1 = ss1.toCharArray();
char[] s2 = ss2.toCharArray();
char[] s3 = ss3.toCharArray();
//预处理方便对应下标
boolean[][] dp = new boolean[m+1][n+1];
//初始化
dp[0][0] = true;//s1和s2都为空,第一个位置为true
for(int i = 1; i <= n; i++){
if(s2[i] == s3[i])
dp[0][i] = true;
else break;
}
for(int j = 1; j <= m; j++){
if(s1[j] == s3[j])
dp[j][0] = true;
else break;
}
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++){
// if(s1[i] == s3[i+j] && dp[i-1][j] == true)
// dp[i][j] = dp[i-1][j];
// else if(s2[j] == s3[i+j] && dp[i][j-1] == true)
// dp[i][j] = dp[i][j-1];
dp[i][j] = (s1[i] == s3[i + j] && dp[i - 1][j]) || (s2[j] == s3[i+j] && dp[i][j - 1]);
}
return dp[m][n];
}
}