主要思路:
遇到左括号则一直压栈,遇到右括号时则从栈中弹出一个元素。
如果此时栈为空,则返回false。
如果这个元素与右括号不匹配,则返回false。
重复此过程,最后判断栈是否为空,若为空则返回true,否则返回false。
代码实现:
//1.3.4//parenthesespackage 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) { Stackstack = new Stack (); 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; }}
测试结果: