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