class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
int len1 = s1.length();
int len2 = s2.length();
if(len1 + len2 != s3.length()){
return false;
}
if(len1 < len2){
isInterleave(s2,s1,s3);
}
boolean dp[] = new boolean[len2 + 1];
dp[0] = true;
for(int i = 0;i < len2;i++){
dp[i + 1] = s2.charAt(i) == s3.charAt(i) && dp[i];
}
for(int i = 0;i < len1;i++){
dp[0] = s1.charAt(i) == s3.charAt(i) && dp[0];
for(int j = 0;j < len2;j++){
dp[j + 1] = (s2.charAt(j) == s3.charAt(i + j + 1) && dp[j]) || (s1.charAt(i) == s3.charAt(i + j + 1) && dp[j + 1]);
}
}
return dp[len2];
}
}