这里写目录标题
- 状态表示:
- 状态转移方程:
- 初始化:
- 填表顺序:
- 返回值:
- 代码呈现:
状态表示:
状态转移方程:
初始化:
填表顺序:
返回值:
我们研究时的范围到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都为空,第一个位置为truefor(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]; }
}