一个完整的括号字符串定义规则如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那么(s)也是完整的。
3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。
牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。
输入描述:
输入包括一行,一个括号序列s,序列长度length(1 ≤ length ≤ 50).
s中每个字符都是左括号或者右括号,即'('或者')'.
输出描述:
输出一个整数,表示最少需要添加的括号数
输入例子1:
(()(()
输出例子1:
2
解题思路如下:
import java.util.*;
public class Main {
public static void main(String[] arg){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine().trim();
List list = new ArrayList<String>();
int len = str.length();
//加入List
for(int i=0;i<len;i++){
list.add(str.substring(i,i+1));
}
String str1="";
while(true){
//找到括号的第一个出现的位置,进行remove,注意这里remove(j)并不是remove同一位置
//而是先remove ( 后remove ),因为第一次remove(之后,)在list的位置变成了j,更新str
//如果没有()了则剩下的字符串的长度就是我们得出的结果
if(str.indexOf("()")!=-1){
int j=str.indexOf("()");
list.remove(j);
list.remove(j);
str="";
for(int j1=0;j1<list.size();j1++){
str=str+list.get(j1);
}
if(list.size()==0){
System.out.println(0);
break;
}
str1=str;
}else{
System.out.println(str1.length());
break;
}
}
}
}