算法(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;
    }

}

 

测试结果:

posted @ 2017-03-07 14:18  我是老邱  阅读(242)  评论(0编辑  收藏  举报