首页 > 其他 > 详细

利用栈判断括号是否匹配(Parentheses)

时间:2021-05-03 18:47:27      阅读:34      评论:0      收藏:0      [点我收藏+]

1、题目

编写一个 Stack 的用例 Parentheses,从标准输入中读取一个文本流并使用栈判定其中的括号是否配对完整。例如,对于 [()]{}{()()} 程序应该打印 true,对于 [(]) 则打印 false。

2、解析

利用栈的特性,左括号全部入栈,遇到右括号,马上出栈第一个元素,如果出栈元素和右括号匹配,则表示是一个完整的括号对,否则之间返回false。

额外需要注意的两个点:

  1. 右括号实际数量超标,类似于这种:[()]],对于这种case,循环遇到右括号时候,判断栈是否为空。
  2. 左括号实际数量超标,类似于这种:[[()],对于这种case,整体循环完毕后,判断栈是否为空。

3、程序

package kb.algorithm;

public class Parentheses {

    public static void main(String[] args) {
        String s = "[[[[[]]]";
        System.out.println(isMatched(s));
    }

    public static boolean isMatched(String s) {
        Stack<Character> items = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            Character item = s.charAt(i);
            if (item == ‘(‘ || item == ‘{‘ || item == ‘[‘) {
                items.push(item);
            }
            if (item == ‘)‘) {
                if (items.empty()) {
                    return false;
                }
                Character pop = items.pop();
                if (pop != ‘(‘) {
                    return false;
                }
            }
            if (item == ‘}‘) {
                if (items.empty()) {
                    return false;
                }
                Character pop = items.pop();
                if (pop != ‘{‘) {
                    return false;
                }
            }
            if (item == ‘]‘) {
                if (items.empty()) {
                    return false;
                }
                Character pop = items.pop();
                if (pop != ‘[‘) {
                    return false;
                }
            }
        }
        if (items.empty()) {
            return true;
        } else {
            return false;
        }
    }
}

利用栈判断括号是否匹配(Parentheses)

原文:https://www.cnblogs.com/Brake/p/14727511.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!