题目描述
给你一个字符串中,全是左括号和右括号,所谓完整的括号就是有左括号和右括号,并且左括号必须在右括号左边,现在给你一个括号字符串,是不完整的,请你求出最少需要添加多少括号才能使该字符串变成完整字符串?
思路分析
首先,最容易想到的思路就是用一个变量,初值为0,然后,遇到左括号接加1,遇到右括号就减1,当最后不为0时,说明缺少。
但是,分析上述思路,其实只是在单纯统计左右括号的数量,并没有考虑左括号必须要在右括号左边这个条件,比如“)(”这个情况,其实是缺少两个括号的,最少需要补充一个左括号和一个右括号。
因此,初值为0的变量,当变成-1时,说明此时已经出现了缺少一个左括号的情况,并且,这种情况是和右边的数据状况无关的,无论右边有什么括号,都不能改变已经缺少一个左括号的事实了。 那是因为,本来就是从左边开始遍历的,出现负数就是左边缺少左括号,此时只能在左边添加来实现完整括号。因此,代码中,出现-1时,就是缺少一个左括号,此时结果累加1,同时,初值变量并不能真的变成-1,如果变成-1,那么后面就需要有一个左括号与之匹配,显然是不合理的。因此,当最后时,初值变量是多少,就说明需要添加多少个右括号。
代码
public static int f1(String str){
char[] chars=str.toCharArray();
int index=0;
int res=0;
for (int i = 0; i < chars.length; i++) {
if(chars[i]=='('){
index++;
}else {
if(index==0){
res++;
}else {
index--;
}
}
}
return res+index;
}