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;
        }
    
    }

    测试结果:

  • 相关阅读:
    LeetCode 382. Linked List Random Node
    LeetCode 398. Random Pick Index
    LeetCode 1002. Find Common Characters
    LeetCode 498. Diagonal Traverse
    LeetCode 825. Friends Of Appropriate Ages
    LeetCode 824. Goat Latin
    LeetCode 896. Monotonic Array
    LeetCode 987. Vertical Order Traversal of a Binary Tree
    LeetCode 689. Maximum Sum of 3 Non-Overlapping Subarrays
    LeetCode 636. Exclusive Time of Functions
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6514515.html
Copyright © 2011-2022 走看看