zoukankan      html  css  js  c++  java
  • 算法(Algorithms)第4版 练习 1.3.4

    主要思路:

    遇到左括号则一直压栈,遇到右括号时则从栈中弹出一个元素。

    如果此时栈为空,则返回false。

    如果这个元素与右括号不匹配,则返回false。

    重复此过程,最后判断栈是否为空,若为空则返回true,否则返回false。

    代码实现:

    //1.3.4
    //parentheses
    package com.qiusongde;
    
    import edu.princeton.cs.algs4.StdIn;
    import edu.princeton.cs.algs4.StdOut;
    
    public class Parentheses {
    
        private static final char LEFT_PAREN     = '(';
        private static final char RIGHT_PAREN    = ')';
        private static final char LEFT_BRACE     = '{';
        private static final char RIGHT_BRACE    = '}';
        private static final char LEFT_BRACKET   = '[';
        private static final char RIGHT_BRACKET  = ']';
        
        public static void main(String[] args) {
            String input = StdIn.readAll().trim();
            StdOut.println("input:" + input);
            StdOut.println(isParenBalanced(input));
        }
        
        public static boolean isParenBalanced(String input) {
            
            Stack<Character> stack = new Stack<Character>();
            
            for(int i = 0; i < input.length(); i++) {
                
                char pare = input.charAt(i);
                
                if(pare == LEFT_PAREN)
                    stack.push(pare);
                if(pare == LEFT_BRACE)
                    stack.push(pare);
                if(pare == LEFT_BRACKET)
                    stack.push(pare);
                
                if(pare == RIGHT_PAREN) {
                    if(stack.isEmpty())
                        return false;
                    if(stack.pop() != LEFT_PAREN)
                        return false;
                }
                
                if(pare == RIGHT_BRACE) {
                    if(stack.isEmpty())
                        return false;
                    if(stack.pop() != LEFT_BRACE)
                        return false;
                }
                
                if(pare == RIGHT_BRACKET) {
                    if(stack.isEmpty())
                        return false;
                    if(stack.pop() != LEFT_BRACKET)
                        return false;
                }
            }
            
            if(stack.isEmpty())
                return true;
            else
                return false;
        }
    
    }

    测试结果:

  • 相关阅读:
    去掉Win10中的“此电脑”中的6个默认文件夹的方法
    Fastboot驱动及安装
    Fastboot驱动及安装
    JNI+NDK编程总结
    JNI+NDK编程总结
    20194742自动生成四则运算题第一版报告
    读构建之法现代软件工程随笔
    想法或创意
    ubuntu控制台乱码
    Java 为什么不支持多继承?
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6514515.html
Copyright © 2011-2022 走看看