一个完整的括号字符串定义规则如下:
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; } }