美文网首页
算法题: 缺失的括号

算法题: 缺失的括号

作者: 燃英 | 来源:发表于2019-11-19 14:33 被阅读0次

    题目描述:
    一个完整的括号字符串定义规则如下:
    1、空字符串是完整的。
    2、如果s是完整的字符串,那么(s)也是完整的。
    3、如果s和t是完整的字符串,将它们连接起来形成的st也是完整的。
    例如,"(()())", ""和"(())()"是完整的括号字符串,"())(", "()(" 和 ")"是不完整的括号字符串。
    有一个括号字符串s(字符串只包含“(”或者“)”),需要在其中任意位置尽量少地添加括号,将其转化为一个完整的括号字符串。请输出至少需要添加括号的个数。

    =====================
    输入示例:
    (()(()

    输出示例:
    2
    =====================

    public static void main(String[] args) {
    
            // ()aa)(
            StringBuilder param = new StringBuilder("a((()");
            Scanner scanner = new Scanner(System.in);
            param = new StringBuilder(scanner.next());
            Integer left = 0;
            Integer right = 0;
            Integer result = 0;
            StringBuilder stack = new StringBuilder();
            for (int i = 0; i < param.length(); i++) {
                if (')' == param.charAt(i)) {
                    // 出栈
                    int j = stack.length() - 1;
                    for (; j >= 0; j--) {
                        char c = stack.charAt(j);
                        stack.deleteCharAt(j);
                        if ('(' == c) {
                            result++;
                            break;
                        }
                    }
                    if (j == -1) {
                        left++;
                    }
                } else {
                    stack.append(param.charAt(i));
                }
            }
            for (int k = 0; k < stack.length(); k++) {
                if ('(' == stack.charAt(k)) {
                    right++;
                }
            }
            System.out.println("匹配:" + result);
            System.out.println("(:" + left);
            System.out.println("):" + right);
        }
    

    相关文章

      网友评论

          本文标题:算法题: 缺失的括号

          本文链接:https://www.haomeiwen.com/subject/pwlwmctx.html