Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 = "aabcc"
,
s2 = "dbbca"
,
When s3 = "aadbbcbcac"
, return true.
When s3 = "aadbbbaccc"
, return false.
package leetCode; /** * Created by lxw, liwei4939@126.com on 2018/3/13. */ public class l097_InterleavingString { public boolean isInterleave(String s1, String s2, String s3){ if (s1.length() + s2.length() != s3.length()){ return false; } boolean[][] matrix = new boolean[s1.length()+1][s2.length()+1]; matrix[0][0] = true; for (int i =1; i < matrix[0].length; i++){ matrix[0][i] = matrix[0][i-1] && s2.charAt(i-1) == s3.charAt(i-1); } for (int i = 1; i < matrix.length; i++){ matrix[i][0] = matrix[i-1][0] && s1.charAt(i-1) == s3.charAt(i-1); } for (int i= 1; i < matrix.length; i++){ for (int j=1; j < matrix[0].length; j++){ matrix[i][j] = (matrix[i-1][j] && (s1.charAt(i-1) == s3.charAt(i+j-1))) || (matrix[i][j-1] && (s2.charAt(j-1) == s3.charAt(i+j-1))); } } return matrix[s1.length()][s2.length()]; } public static void main(String[] args){ l097_InterleavingString tmp = new l097_InterleavingString(); String s1 = "aabcc"; String s2 = "dbbca"; String s3 = "aadbbcbcac"; String s4 = "aadbbbaccc"; System.out.println(tmp.isInterleave(s1, s2, s3) ? "s3 is the interleaving String of s1 and s2": "s3 isn't the interleaving String of s1 and s2"); System.out.println(tmp.isInterleave(s1, s2, s4) ? "s4 is the interleaving String of s1 and s2" : "s4 isn't the interleaving String of s1 and s2"); } }