一、题目描述
二、示例
三、难度
中等
四、代码
Java版
法一:栈
public class Solution {
public static int minAddToMakeValid(String s) {
Deque<String> stack = new ArrayDeque<>();
int count = 0;
for (int i = 0; i < s.length(); ++i) {
// 若为左括弧则进栈
if ("(".equals("" + s.charAt(i))) {
stack.addLast("" + s.charAt(i));
}
// 若为右括弧,栈空则(左)括号数+1,不空出栈匹配
else {
if (stack.isEmpty()) ++count;
else {
stack.pollLast();
}
}
}
// 还需考虑栈中未被匹配的括号
return count + stack.size();
}
public static void main(String[] args) {
int[] arr = new int[]{-1, 0};
System.out.println(minAddToMakeValid("())"));
System.out.println(minAddToMakeValid("((("));
System.out.println(minAddToMakeValid(")((("));
System.out.println(minAddToMakeValid("(()))("));
}
}
法二
public class Solution {
public static int minAddToMakeValid(String s) {
while (s.indexOf("()") != -1) {
s = s.replace("()","");
}
return s.length();
}
}