Skip to content

Commit 583c210

Browse files
authored
Update Remove All Occurrences of a Substring.java
1 parent aa8154b commit 583c210

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed
Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,32 @@
11
class Solution {
2-
public String removeOccurrences(String s, String part) {
3-
while (true) {
4-
int idx = s.indexOf(part);
5-
if (idx == -1) {
6-
break;
7-
}
8-
s = s.substring(0, idx) + s.substring(idx + part.length());
2+
public String removeOccurrences(String s, String part) {
3+
Stack<Character> stack = new Stack<>();
4+
int n = s.length();
5+
int partLength = part.length();
6+
for (int i = 0; i < n; i++) {
7+
stack.push(s.charAt(i));
8+
if (stack.size() >= partLength && check(stack, part, partLength)) {
9+
for (int j = 0; j < partLength; j++) {
10+
stack.pop();
11+
}
12+
}
13+
}
14+
StringBuilder sb = new StringBuilder();
15+
while (!stack.isEmpty()) {
16+
sb.append(stack.pop());
17+
}
18+
return sb.reverse().toString();
19+
}
20+
21+
private boolean check(Stack<Character> stack, String part, int partLength) {
22+
Stack<Character> temp = new Stack<>();
23+
temp.addAll(stack);
24+
for (int i = partLength - 1; i >= 0; i--) {
25+
if (temp.isEmpty() || temp.peek() != part.charAt(i)) {
26+
return false;
27+
}
28+
temp.pop();
29+
}
30+
return true;
931
}
10-
return s;
11-
}
1232
}

0 commit comments

Comments
 (0)