Skip to content

Commit 1da354e

Browse files
committed
skipping the element on condition
1 parent 6daf4f8 commit 1da354e

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
class Solution {
2+
public List<String> removeInvalidParentheses(String s) {
3+
List<String> output = new ArrayList<>();
4+
removeHelper(s, output, 0, 0, '(', ')');
5+
return output;
6+
}
7+
8+
public void removeHelper(String s, List<String> output, int iStart, int jStart, char openParen, char closedParen) {
9+
int numOpenParen = 0, numClosedParen = 0;
10+
for (int i = iStart; i < s.length(); i++) {
11+
if (s.charAt(i) == openParen) numOpenParen++;
12+
if (s.charAt(i) == closedParen) numClosedParen++;
13+
if (numClosedParen > numOpenParen) { // We have an extra closed paren we need to remove
14+
for (int j = jStart; j <= i; j++) // Try removing one at each position, skipping duplicates
15+
if (s.charAt(j) == closedParen && (j == jStart || s.charAt(j - 1) != closedParen))
16+
// Recursion: iStart = i since we now have valid # closed parenthesis thru i. jStart = j prevents duplicates
17+
removeHelper(s.substring(0, j) + s.substring(j + 1, s.length()), output, i, j, openParen, closedParen);
18+
return; // Stop here. The recursive calls handle the rest of the string.
19+
}
20+
}
21+
// No invalid closed parenthesis detected. Now check opposite direction, or reverse back to original direction.
22+
String reversed = new StringBuilder(s).reverse().toString();
23+
if (openParen == '(')
24+
removeHelper(reversed, output, 0, 0, ')','(');
25+
else
26+
output.add(reversed);
27+
}
28+
}

0 commit comments

Comments
 (0)