题目
一个完整的括号字符串定义规则如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那么(s)也是完整的。
3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
例如,"(()())", ““和”(())()“是完整的括号字符串,”())(”, “()(” 和 ")"是不完整的括号字符串。
牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。
实现
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
char[] chs = str.toCharArray();
System.out.println(f(chs));
}
public static int f(char[] chs) {
int count = 0; //遇到左括号就++,遇到右括号就--
//当count为负数的时候,就表示缺少左括号,此时用ans记录下来
//缺失的左括号,然后让coutn重新等于0,就表示缺的左括号已经补上了
//遍历到最后,如果count == 0,那么ans就是需要填补的左括号的数量
//如果count > 0,就表示缺少的右括号的数量,当然count是不可能小于0的
//因为在遍历的过程中,小于0时,会将它重新置位0
int ans = 0;
for (int i = 0; i < chs.length; i++) {
if (chs[i] == '(') {
count++;
} else if (chs[i] == ')') {
if (count == 0) {
ans++;
} else {
count--;
}
}
}
return ans + count;
}
}