forked from yubinbai/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSolution.java
More file actions
55 lines (48 loc) · 2.12 KB
/
Solution.java
File metadata and controls
55 lines (48 loc) · 2.12 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class Solution {
char[] c1, c2, c3;
byte[][] dp;
public boolean isInterleave(String s1, String s2, String s3) {
c1 = s1.toCharArray();
c2 = s2.toCharArray();
c3 = s3.toCharArray();
if (c1.length + c2.length != c3.length) return false;
dp = new byte[c1.length + 1][c2.length + 1];
return isInterleaveDP(0, 0) == 1;
}
private byte isInterleaveDP(int i, int j) {
if (dp[i][j] != 0) {
return dp[i][j];
}
int k = i + j;
if (k == c3.length) {
return dp[i][j] = 1;
}
if (i < c1.length && j < c2.length && c1[i] == c2[j] && c2[j] == c3[k]) {
if (isInterleaveDP(i + 1, j) == 1 || isInterleaveDP(i, j + 1) == 1) {
return dp[i][j] = 1;
} else {
return dp[i][j] = -1;
}
} else if (i < c1.length && c1[i] == c3[k]) {
return dp[i][j] = isInterleaveDP(i + 1, j);
} else if (j < c2.length && c2[j] == c3[k]) {
return dp[i][j] = isInterleaveDP(i, j + 1);
} else {
return dp[i][j] = -1;
}
}
public static void main(String[] args) {
Solution s = new Solution();
boolean b1 = s.isInterleave("aabcc", "dbbca", "aadbbcbcac");
boolean b2 = s.isInterleave("aabcc", "dbbca", "aadbbbaccc");
boolean b3 = s.isInterleave("bbbbbabbbbabaababaaaabbababbaaabbabbaaabaaaaababbbababbbbbabbbbababbabaabababbbaabababababbbaaababaa"
, "babaaaabbababbbabbbbaabaabbaabbbbaabaaabaababaaaabaaabbaaabaaaabaabaabbbbbbbbbbbabaaabbababbabbabaab"
, "babbbabbbaaabbababbbbababaabbabaabaaabbbbabbbaaabbbaaaaabbbbaabbaaabababbaaaaaabababbababaababbababbbababbbbaaaabaabbabbaaaaabbabbaaaabbbaabaaabaababaababbaaabbbbbabbbbaabbabaabbbbabaaabbababbabbabbab"
);
boolean b4 = s.isInterleave("a", "b", "a");
System.out.format("b1 %b\n", b1);
System.out.format("b2 %b\n", b2);
System.out.format("b3 %b\n", b3);
System.out.format("b4 %b\n", b4);
}
}