1. 程式人生 > >Valid Parentheses驗證有效括號對

Valid Parentheses驗證有效括號對

題目:https://leetcode.com/problems/valid-parentheses/description/

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

題目大意:

這道題讓我們驗證輸入的字串是否為有效的括號字串,包括大括號,中括號和小括號。


思路

棧最典型的應用就是驗證配對情況,作為有效的括號,有一個右括號就必定有一個左括號在前面,所以我們可以將左括號都push進棧中,遇到右括號的時候再pop來消掉。這裡不用擔心連續不同種類左括號的問題,因為有效的括號對最終還是會有緊鄰的括號對。如棧中是({[,來一個]變成({,再來一個},變成(。

注意

棧在peek或者pop操作之前要驗證非空,否則會丟擲StackEmptyException。

 /**判斷輸入的[]{}()是否是有效的
	 * @param s	需要校驗的括號字串
	 * @return	是否有效
	 */
	public static boolean isValid(String s){
		 Stack<Character> mode=new Stack<Character>();
		 for (int i = 0; i < s.length(); i++) {
			if(s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{'){
				mode.push(s.charAt(i));
			}else {
				if(mode.isEmpty()){
					return false;
				}else if ((s.charAt(i)==')'&&mode.peek()!='(') || (s.charAt(i)==']'&&mode.peek()!='[') || (s.charAt(i)=='}'&&mode.peek()!='{')) {
					return false;
				}
				mode.pop();
			}
		}
		 
		 return mode.isEmpty();
	 }
參考:https://segmentfault.com/a/1190000003481208