您的位置:首页 > 编程语言 > Go语言

算法(Algorithms)第4版 练习 1.3.4

2017-03-07 14:18 232 查看
主要思路:

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

如果此时栈为空,则返回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;
}

}


测试结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: