题目描述
一个完整的括号字符串定义规则如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那么(s)也是完整的。
3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。
牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。
输入描述:
输入包括一行,一个括号序列s,序列长度length(1 ≤ length ≤ 50). s中每个字符都是左括号或者右括号,即'('或者')'.
输出描述:
输出一个整数,表示最少需要添加的括号数
示例1
输入
(()(()
输出
2
解题思路:
通过栈可将匹配的括号过滤掉,那么过滤完后栈的大小就是多余左括号的数量,再单独统计多余右括号的数量,最后将两者相加即可。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
char[] str = sc.next().toCharArray();
Stack<Character> stack = new Stack<>();
int num = 0;//多余的右括号
for(char c : str){
if(c == '(')
stack.push('(');
else{
if(!stack.isEmpty())
stack.pop();
else
num++;
}
}
System.out.println(stack.size()+num);
}
}