括号序列由()、{}、[]组成,例如“(([{}]))()”是合法的,而“(}{)"“(}(}"和"({))}”都是不 合法的。如果一个序列不合法,编写一个实验程序求添加的最少括号数,使这个序列变成合 法的。例如,“(}(}”最少需要添加4个括号变成合法的,即变为“(){}(){}”Java代码
时间: 2024-02-25 09:57:17 浏览: 64
好的,以下是使用Java实现的代码:
```java
import java.util.Stack;
public class MinAddParenthesis {
public static int minAdd(String s) {
Stack<Character> stack = new Stack<>();
int count = 0;
for (char c : s.toCharArray()) {
if (c == '(' || c == '{' || c == '[') {
stack.push(c);
} else if (!stack.isEmpty() && match(stack.peek(), c)) {
stack.pop();
} else {
stack.push(c);
count++;
}
}
while (!stack.isEmpty()) {
stack.pop();
count++;
}
return count;
}
private static boolean match(char c1, char c2) {
return (c1 == '(' && c2 == ')') ||
(c1 == '{' && c2 == '}') ||
(c1 == '[' && c2 == ']');
}
public static void main(String[] args) {
String s = "(}(}";
int minAdd = minAdd(s);
System.out.println("需要添加的最少括号数为:" + minAdd);
}
}
```
代码中使用了一个栈来检查括号序列是否合法,并记录需要添加的最少括号数。match方法用来判断两个括号是否匹配。遍历完整个括号序列后,如果栈非空,则说明有未匹配的左括号,此时需要将剩余的左括号全部弹出,每弹出一个左括号,就将count加1。最终得到的count即为添加的最少括号数。
阅读全文