一个完整的括号字符串定义规则如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那么(s)也是完整的。
3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。
牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。
输入包括一行,一个括号序列s,序列长度length(1 ≤ length ≤ 50).
s中每个字符都是左括号或者右括号,即'('或者')'.
输出一个整数,表示最少需要添加的括号数
(()(()
2
遍历字符串,当遇到左括号时,count++
遇到右括号时,count--
每当count=-1时,need++,表示缺失的左括号数
最后count + need就是所得结果
import java.util.*;
public class Main {
public static void main(String[] args) {
int need = 0;
int count = 0;
Scanner sc = new Scanner(System.in);
String str = sc.next();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '(') {
count++;
} else {
count--;
}
if (count < 0) {
count = 0;
need++;
}
}
System.out.println(need + count);
}
}
import java.io.*; import java.util.Scanner; public class Main { public static void main(String args[]) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); String str = buf.readLine(); char[] t = str.toCharArray(); int extra=0; String[] s = new String[t.length]; for (int i = 0; i < t.length; i++) { s[i] = String.valueOf(t[i]); } for (int i = 0; i < s.length-1; i++) { if (s[i].equals("(")) { for(int j=i+1;j<s.length;j++) { if (s[j].equals(")")) { s[i] = ""; s[j] = ""; break; } } } } extra=s.length; for (int i = 0; i < s.length; i++) { if (s[i].equals("")) { extra--; } } System.out.println(extra); } }可以消除的两个括号直接消除(变成" " ) 不能消除的统计出来 就是需要添加的了括号数量了🤗
/*
思路:类似栈的思想 左右括号相遇时可消除
countL 记录最终正确括号消除后所剩的'('的数目
countL 记录最终正确括号消除后所剩的')'的数目
*/
import java.util.*;
public class Main{
public static void main(String[] args){
try(Scanner in = new Scanner(System.in)){
System.out.println(helper(in.nextLine()));
}
}
public static int helper(String s){
char[] cs = s.toCharArray();
int countL = 0,countR = 0,i = 0;
while(i < cs.length){
if(cs[i] == '('){
countL++;
}else {
// 遇到右括号时,若前面有左括号未匹配,则匹配消除 如果没有,则右括号数目加1
if(countL != 0){
countL--;
}else{
countR++;
}
}
i++;
}
return countL + countR;
}
}