zoukankan      html  css  js  c++  java
  • 利用栈判断括号是否匹配(Parentheses)

    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;
            }
        }
    }
    
    
    作者:iBrake
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    iOS开发JSON文件解析数据成Model的过程简单介绍
    ios 开发中 --做登陆注册时编译出现的错误和解决方法
    iOS 开发 SMSSDK-免费短信获取的实现方法
    IOS 设计 面试题及答案
    Cycle (KMP + hash)
    ATM Mechine (概率DP)
    Bubble Sort (找规律)
    The All-purpose Zero (最长公共子序列)
    Substring (后缀数组 + 计数)
    Lucky 7 (容斥原理 + 中国剩余定理)
  • 原文地址:https://www.cnblogs.com/Brake/p/14727511.html
Copyright © 2011-2022 走看看