題目描述
題目難度:簡單
給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認為是有效字符串。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
解題思路
對於一個字符串,先toCharArray()把它轉化成char類型的數組
再使用一個棧來操作;
遍歷char數組,對於每一個char有以下情況
(1)假如stack的size為0,則表示之前遍歷過的char都能剛好配對,此時如果數組中還有沒有遍歷的,則直接將其push進stack,繼續往下遍歷;
(2)假如stack的size不為0,且棧頂的元素和當前遍歷到的元素剛好符合“{”“}”或“(”“)”或“[”“]”,則表示當前配對,此時就將棧頂的元素pop出來,繼續往下遍歷;
(3)假如stack的size不為0,且沒有滿足第二種情況,則直接將其push進stack,繼續往下遍歷;
當遍歷完整個數組后,如果stack的size剛好為0,則證明是配對的;如果不為0,則當然不配對啦。
代碼如下
class Solution { public boolean isValid(String s) { Stack<Character> stack=new Stack<>(); char[] chars=s.toCharArray(); for(char aChar:chars){ if(stack.size()==0){ stack.push(aChar); }else if(isSym(stack.peek(),aChar)){ stack.pop(); }else{ stack.push(aChar); } } return stack.size()==0; } private boolean isSym(char c1, char c2) { return (c1 == '(' && c2 == ')') || (c1 == '[' && c2 == ']') || (c1 == '{' && c2 == '}'); } }