dp
- dp[i][j] 表示s1的前i个字符和s2的前j个字符能否组成s3的前i+j个字符,注意不是index
class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
int l1 = s1.length(), l2 = s2.length(), l3 = s3.length();
if (l1 + l2 != l3) {
return false;
}
boolean[][] dp = new boolean[l1 + 1][l2 + 1];
dp[0][0] = true;
for (int i = 1; i <= l1 && s1.charAt(i - 1) == s3.charAt(i - 1); i++) {
dp[i][0] = true;
}
for (int j = 1; j <= l2 && s2.charAt(j - 1) == s3.charAt(j - 1); j++) {
dp[0][j] = true;
}
for (int i = 1; i <= l1; i++) {
for (int j = 1; j <= l2; j++) {
dp[i][j] = (dp[i][j - 1] && (s2.charAt(j - 1) == s3.charAt(i + j - 1)))
|| (dp[i - 1][j] && (s1.charAt(i - 1) == s3.charAt(i + j - 1)));
}
}
return dp[l1][l2];
}
}