leetcode 97 isinterleave

Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.

Example 1:

1
2
Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
Output: true

Example 2:

1
2
Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
Output: false

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class (){    
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<s1.length()+1; i++){
if (s3.charAt(i-1) == s1.charAt(i-1) && matrix[i-1][0]){
matrix[i][0] = true;
}
}
for (int i=1; i<s2.length()+1; i++){
if (s3.charAt(i-1) == s2.charAt(i-1) && matrix[0][i-1]){
matrix[0][i] = true;
}
}
for (int i=1; i<s1.length()+1; i++){
for (int j=1; j<s2.length()+1; j++){
if (s3.charAt(i+j-1) == s1.charAt(i-1) && matrix[i-1][j]){
matrix[i][j] = true;
}
if (s3.charAt(i+j-1) == s2.charAt(j-1) && matrix[i][j-1]){
matrix[i][j] = true;
}
}
}
return matrix[s1.length()][s2.length()];
}
}