思路
动态规划,利用一个二维数组,dp[i][j]表示s3前i+j个字符能否用s1前i个字符和s2前j个字符交错形成
解题过程
转换方程:dp[i][j]=(dp[i-1][j]&&s3.charAt(i+j-1)==s1.charAt(i-1))||(dp[i][j-1]&&s3.charAt(i+j-1)==s2.charAt(j-1))
Code
java
class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
if(s1.length()+s2.length()!=s3.length())return false;
int len1=s1.length();
int len2=s2.length();
int len3=s3.length();
boolean ans[][]=new boolean[len1+1][len2+1];
ans[0][0]=true;
for(int i=0;i<=len1;i++){
for(int j=0;j<=len2;j++){
if(i>0)
ans[i][j]=ans[i-1][j]&&s3.charAt(i+j-1)==s1.charAt(i-1);
if(j>0)
ans[i][j]=ans[i][j]||(ans[i][j-1]&&s3.charAt(i+j-1)==s2.charAt(j-1));
}
}
return ans[len1][len2];
}
}