Skip to content

Commit b1246c4

Browse files
solves interleaving strings in java
1 parent bf241b0 commit b1246c4

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
| 94 | [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal) | [![Java](assets/java.png)](src/BinaryTreeInorderTraversal.java) [![Python](assets/python.png)](python/binary_tree_inorder_traversal.py) | |
9090
| 95 | [Unique Binary Search Trees II](https://leetcode.com/problems/unique-binary-search-trees-ii) | [![Java](assets/java.png)](src/UniqueBinarySearchTreesII.java) | |
9191
| 96 | [Unique Binary Search Trees](https://leetcode.com/problems/unique-binary-search-trees) | [![Java](assets/java.png)](src/UniqueBinarySearchTrees.java) | |
92-
| 97 | [Interleaving String](https://leetcode.com/problems/interleaving-string) | | |
92+
| 97 | [Interleaving String](https://leetcode.com/problems/interleaving-string) | [![Java](assets/java.png)](src/InterleavingString.java) | |
9393
| 98 | [Validate Binary Search Tree](https://leetcode.com/problems/validate-binary-search-tree) | [![Java](assets/java.png)](src/ValidateBinarySearchTree.java) | |
9494
| 99 | [Recover Binary Search Tree](https://leetcode.com/problems/recover-binary-search-tree) | | |
9595
| 100 | [Same Tree](https://leetcode.com/problems/same-tree) | [![Java](assets/java.png)](src/SameTree.java) [![Python](assets/python.png)](python/same_tree.py) | |
@@ -281,6 +281,8 @@
281281
| 349 | [Intersection of 2 Arrays](https://leetcode.com/problems/intersection-of-two-arrays) | [![Java](assets/java.png)](src/IntersectionOfTwoArrays.java) [![Python](assets/python.png)](python/intersection_of_2_array.py) | |
282282
| 350 | [Intersection of 2 Arrays II](https://leetcode.com/problems/intersection-of-two-arrays-ii) | [![Java](assets/java.png)](src/IntersectionOfTwoArraysII.java) [![Python](assets/python.png)](python/intersection_of_2_arrays_II.py) | |
283283
| 351 | 🔒 [Android Unlock Patterns](https://leetcode.com/problems/android-unlock-patterns) | | |
284+
| 355 | [Design Twitter](https://leetcode.com/problems/design-twitter) | | |
285+
| 357 | [Count Numbers with Unique Digits](https://leetcode.com/problems/count-numbers-with-unique-digits) | | |
284286
| 359 | 🔒 [Logger Rate Limiter](https://leetcode.com/problems/logger-rate-limiter) | | |
285287
| 367 | [Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square) | [![Java](assets/java.png)](src/IsPerfectSquare.java) [![Python](assets/python.png)](python/valid_perfect_square.py) | |
286288
| 374 | [Guess Number Higher or Lower](https://leetcode.com/problems/guess-number-higher-or-lower) | [![Java](assets/java.png)](src/GuessNumberHigherOrLower.java) [![Python](assets/python.png)](python/guess_number_higher_or_lower.py) | |

src/InterleavingString.java

+29-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,34 @@
1-
public class InterleavingString {
2-
public static void main(String[] args) {
3-
System.out.println(isInterleave("aabcc", "dbbca", "aadbbcbcac"));
4-
}
1+
// https://leetcode.com/problems/interleaving-string
2+
// T: O(n * m)
3+
// S: O(min(m, n))
54

6-
public static boolean isInterleave(String s1, String s2, String s3) {
5+
public class InterleavingString {
6+
public boolean isInterleave(String s1, String s2, String s3) {
77
if (s1.length() + s2.length() != s3.length()) return false;
8-
for (int i = 0, j = 0, t = 0 ; i <= s1.length() && j <= s2.length() && t < s3.length() ; t++) {
9-
if (i < s1.length() && s3.charAt(t) == s1.charAt(i)) i++;
10-
else if (j < s2.length() && s3.charAt(t) == s2.charAt(j)) j++;
11-
else return false;
8+
if (s1.length() < s2.length()) {
9+
String temp = s1;
10+
s1 = s2;
11+
s2 = temp;
1212
}
13-
return true;
13+
14+
final int rows = s1.length() + 1, columns = s2.length() + 1;
15+
final boolean[] dp = new boolean[columns];
16+
17+
for (int row = 0 ; row < rows ; row++) {
18+
for (int column = 0 ; column < columns ; column++) {
19+
if (row == 0 && column == 0) {
20+
dp[column] = true;
21+
} else if (row == 0) {
22+
dp[column] = dp[column - 1] && s2.charAt(column - 1) == s3.charAt(row + column - 1);
23+
} else if (column == 0) {
24+
dp[column] = dp[column] && s1.charAt(row - 1) == s3.charAt(row + column - 1);
25+
} else {
26+
dp[column] = (s1.charAt(row - 1) == s3.charAt(row + column - 1) && dp[column])
27+
|| (s2.charAt(column - 1) == s3.charAt(row + column - 1) && dp[column - 1]);
28+
}
29+
}
30+
}
31+
32+
return dp[columns - 1];
1433
}
1534
}

0 commit comments

Comments
 (0)