Skip to content

Commit 99d65bc

Browse files
solves simplify path
1 parent df815e8 commit 99d65bc

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
| 67 | [Add Binary](https://leetcode.com/problems/add-binary) | [![Java](assets/java.png)](src/AddBinary.java) [![Python](assets/python.png)](python/add_binary.py) | |
6767
| 69 | [Sqrt(x)](https://leetcode.com/problems/sqrtx) | [![Java](assets/java.png)](src/Sqrtx.java) [![Python](assets/python.png)](python/sqrt.py) | |
6868
| 70 | [Climbing Stairs](https://leetcode.com/problems/climbing-stairs) | [![Java](assets/java.png)](src/ClimbingStairs.java) [![Python](assets/python.png)](python/climbing_stairs.py) | |
69+
| 71 | [Simplify Path](https://leetcode.com/problems/simplify-path) | [![Java](assets/java.png)](src/SimplifyPath.java) | |
6970
| 73 | [Set Matrix Zeroes](https://leetcode.com/problems/set-matrix-zeroes) | [![Java](assets/java.png)](src/SetMatrixZeroes.java) | |
7071
| 83 | [Remove Duplicates from Sorted List](https://leetcode.com/problems/remove-duplicates-from-sorted-list) | [![Java](assets/java.png)](src/RemoveDuplicatesFromSortedList.java) [![Python](assets/python.png)](python/remove_duplicates_from_linked_list.py) | |
7172
| 88 | [Merge Sorted Array](https://leetcode.com/problems/merge-sorted-array) | [![Java](assets/java.png)](src/MergeSortedArray.java) [![Python](assets/python.png)](python/merge_sorted_array.py) | |

src/SimplifyPath.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// https://leetcode.com/problems/simplify-path
2+
// T: O(|path|)
3+
// S: O(|path|)
4+
5+
import java.util.LinkedList;
6+
7+
public class SimplifyPath {
8+
private static final char SLASH = '/';
9+
private static final String ROOT = "/";
10+
private static final String GO_ONE_LEVEL_UP = "..";
11+
private static final String STAY_WHERE_YOU_ARE = ".";
12+
13+
public String simplifyPath(String path) {
14+
final LinkedList<StringBuilder> fragments = new LinkedList<>();
15+
StringBuilder current = new StringBuilder();
16+
for (int i = 0 ; i < path.length() ; i++) {
17+
if (path.charAt(i) == SLASH) {
18+
if (!isEmpty(current)) {
19+
addToFragments(current, fragments);
20+
current = new StringBuilder();
21+
}
22+
} else current.append(path.charAt(i));
23+
}
24+
if (!isEmpty(current)) addToFragments(current, fragments);
25+
return toPath(fragments);
26+
}
27+
28+
private String toPath(LinkedList<StringBuilder> fragments) {
29+
if (fragments.isEmpty()) return ROOT;
30+
StringBuilder result = new StringBuilder();
31+
for (StringBuilder fragment : fragments) {
32+
result.append(SLASH).append(fragment);
33+
}
34+
return result.toString();
35+
}
36+
37+
private void removeLast(LinkedList<StringBuilder> fragments) {
38+
if (!fragments.isEmpty()) {
39+
fragments.removeLast();
40+
}
41+
}
42+
43+
private void addToFragments(StringBuilder current, LinkedList<StringBuilder> fragments) {
44+
String currentString = current.toString();
45+
if (GO_ONE_LEVEL_UP.equals(currentString)) {
46+
removeLast(fragments);
47+
} else if (!STAY_WHERE_YOU_ARE.equals(currentString)) {
48+
fragments.add(current);
49+
}
50+
}
51+
52+
private boolean isEmpty(StringBuilder stringBuilder) {
53+
return stringBuilder.length() == 0;
54+
}
55+
}

0 commit comments

Comments
 (0)