此题所犯的错误,参看leetcode。
重点在于如何定义[i][j]到底代表啥,之后,必须严格按照状态转移方程来写code。值得反复理解,反复做
public class Solution {
public boolean isInterleave(String s1, String s2, String s3) {int l1 = s1.length();
int l2 = s2.length();
int l3 = s3.length();
if (l1 + l2 != l3) {
return false;
}
boolean [][] matrix = new boolean[l1 + 1][l2 + 1];
matrix[0][0] = true;
for (int i = 1; i <= l1; i++) {
if (s1.charAt(i-1) == s3.charAt(i-1) && matrix[i-1][0]) {
matrix[i][0] = true;
}
}
for (int i = 1; i <= l2; i++) {
if (s2.charAt(i-1) == s3.charAt(i-1) && matrix[0][i-1]) {
matrix[0][i] = true;
}
}
for (int i = 1; i <= l1; i++) {
for (int j = 1; j <= l2; j++) {
if ((s1.charAt(i - 1) == s3.charAt(i + j - 1) && matrix[i - 1][j]) || (s2.charAt(j - 1) == s3.charAt(i + j - 1) && matrix[i][j - 1])) {
matrix[i][j] = true;
}
}
}
return matrix[l1][l2];
}
}