LeetCode第20題 有效的括號
阿新 • • 發佈:2019-01-14
*
給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
1 class Solution20 { 2 3 public boolean isValid(String s) { 4 if (s == null) { 5 return false; 6 } 7 Stack<Character> stack = new Stack<>(); 8 for (int i = 0; i < s.length(); i++) {9 char ch = s.charAt(i); 10 if (ch == '[' || ch == '{' || ch == '(') { 11 stack.push(ch); 12 } else { 13 if (stack.isEmpty()) { 14 return false; 15 } 16 switch (ch) { 17 case ')': 18 if (stack.peek() == '(') { 19 stack.pop();20 break; 21 } else { 22 return false; 23 } 24 case '}': 25 if (stack.peek() == '{') { 26 stack.pop(); 27 break; 28 } else { 29 return false; 30 } 31 case']': 32 if (stack.peek() == '[') { 33 stack.pop(); 34 } else { 35 return false; 36 } 37 } 38 } 39 } 40 return stack.isEmpty(); 41 } 42 }
注意空字串可被認為是有效字串。
*/
/*
思路: 時間複雜度O(n)
將左括號放入棧中,如果是右括號,判斷當前棧頂元素是否和當前有括號型別一致。
每有一個有括號與棧頂左括號匹配,就將左括號彈出。
棧為空表示每一個右括號都匹配到了左括號,當然如果棧中沒有任何左括號卻出現了右括號,直接返回false就可以。
*/