Valid Parentheses驗證有效括號對
阿新 • • 發佈:2019-02-11
題目: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。
參考:https://segmentfault.com/a/1190000003481208/**判斷輸入的[]{}()是否是有效的 * @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(); }