首页 > 试题广场 >

缺失的括号

[编程题]缺失的括号
  • 热度指数:6040 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
一个完整的括号字符串定义规则如下:
1、空字符串是完整的。
2、如果s是完整的字符串,那么(s)也是完整的。
3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。
牛牛有一个括号字符串s,现在需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请问牛牛至少需要添加多少个括号。

输入描述:
输入包括一行,一个括号序列s,序列长度length(1 ≤ length ≤ 50).
s中每个字符都是左括号或者右括号,即'('或者')'.


输出描述:
输出一个整数,表示最少需要添加的括号数
示例1

输入

(()(() 

输出

2 

用两个变量count和need就可以搞定。

遍历字符串,当遇到左括号时,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);
    }
}
发表于 2019-06-15 17:31:22 回复(0)
 
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);

    }
}
可以消除的两个括号直接消除(变成" " ) 不能消除的统计出来 就是需要添加的了括号数量了🤗
发表于 2019-03-25 14:25:19 回复(0)
/*
    思路:类似栈的思想  左右括号相遇时可消除
         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;
    }
}


发表于 2019-02-10 17:25:08 回复(2)
import java.text.ParseException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        int count = 0,q = 0;
        for(int i=0;i<input.length();i++){
            char c = input.charAt(i);
            if(c=='('){
                count++;
            }else if(c==')'){
                count--;
            }else{

            }

            if(count<0){
                q += Math.abs(count);
                count = 0;
            }
        }

        q += count;

        System.out.println(Math.abs(q));
    }

}
发表于 2017-12-20 14:06:09 回复(0)