1 public class Solution { 2 public boolean isInterleave(String s1, String s2, String s3) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 int len1 = s1.length(), len2 = s2.length(), len3 = s3.length(); 6 if(len3 != len1 + len2){ 7 return false; 8 } 9 10 boolean[][] match = new boolean[len1 + 1][len2 + 1]; 11 match[0][0] = true; 12 13 // j == 0 14 int i = 1; 15 while(i <= len1 && s1.charAt(i-1) == s3.charAt(i-1)){ 16 match[i][0] = true; 17 i++; 18 } 19 20 // i == 0 21 int j = 1; 22 while(j <= len2 && s2.charAt(j-1) == s3.charAt(j-1)){ 23 match[0][j] = true; 24 j++; 25 } 26 27 for(int m = 1; m <= len1; m++){ 28 for(int n = 1; n <= len2; n++){ 29 char c = s3.charAt(m + n - 1); 30 if(c == s1.charAt(m - 1)){ 31 match[m][n] |= match[m-1][n]; 32 } 33 if(c == s2.charAt(n - 1)){ 34 match[m][n] |= match[m][n-1]; 35 } 36 } 37 } 38 return match[len1][len2]; 39 } 40 }
1 public class Solution { 2 public boolean isInterleave(String s1, String s2, String s3) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 int len1 = s1.length(), len2 = s2.length(), len3 = s3.length(); 6 if(len3 != len1 + len2){ 7 return false; 8 } 9 10 boolean[][] match = new boolean[len1 + 1][len2 + 1]; 11 match[0][0] = true; 12 13 // j == 0 14 int i = 1; 15 while(i <= len1 && s1.charAt(i-1) == s3.charAt(i-1)){ 16 match[i][0] = true; 17 i++; 18 } 19 20 // i == 0 21 int j = 1; 22 while(j <= len2 && s2.charAt(j-1) == s3.charAt(j-1)){ 23 match[0][j] = true; 24 j++; 25 } 26 27 for(int m = 1; m <= len1; m++){ 28 for(int n = 1; n <= len2; n++){ 29 char c = s3.charAt(m + n - 1); 30 if(c == s1.charAt(m - 1)){ 31 match[m][n] |= match[m-1][n]; 32 } 33 if(c == s2.charAt(n - 1)){ 34 match[m][n] |= match[m][n-1]; 35 } 36 } 37 } 38 return match[len1][len2]; 39 } 40 }