Как вывести валидные скобки?
Найти валидные круглые скобки. Обязательно счетчик и правильные скобки нужно выводить.
Пример 1:
Ввод: (()
Вывод: 2 - ()
Пример 2:
Ввод: )()())
Вывод: 4 - ()()
Пример 3:
Ввод: )(()())
Вывод: 6 - (()())
Пример 4:
Ввод: )(
Вывод: 0
Я решил так:
public class ValidParentheses {
public static void main(String[] args) {
String parentheses1 = "(()";
String parentheses2 = ")()())";
String parentheses3 = ")(()())";
String parentheses4 = ")(";
System.out.println(longestValidParentheses(parentheses1) + " - " + getValidParentheses(parentheses1));
System.out.println(longestValidParentheses(parentheses2) + " - " + getValidParentheses(parentheses2));
System.out.println(longestValidParentheses(parentheses3) + " - " + getValidParentheses(parentheses3));
System.out.println(longestValidParentheses(parentheses4) + " - " + getValidParentheses(parentheses4));
}
private static String getValidParentheses(String input) {
int open = 0;
int ind = 0;
StringBuilder result = new StringBuilder();
while (ind < input.length()) {
char c = input.charAt(ind);
if (c == '(') {
open++;
result.append(c);
}
if (c == ')' && open > 0) {
open--;
result.append(c);
}
ind++;
}
while (open > 0) {
result.append(')');
open--;
}
return result.toString();
}
public static int longestValidParentheses(String s) {
int maxans = 0;
Stack<Integer> stack = new Stack<>();
stack.push(-1);
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push(i);
} else {
stack.pop();
if (stack.empty()) {
stack.push(i);
} else {
maxans = Math.max(maxans, i - stack.peek());
}
}
}
return maxans;
}
}
вывод получается вот такой вот:
2 - (())
4 - ()()
6 - (()())
0 - ()
т.е пример 2 и 3,отработали норм, а 1 и 4,неверно,в чем ошибка?
Источник: Stack Overflow на русском