20 有效的括號(LeetCode HOT 100)
阿新 • • 發佈:2022-04-10
描述:
給定一個只包括 '(',')','{','}','[',']' 的字串 s ,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
示例 1:
輸入:s = "()"
輸出:true
示例 2:
輸入:s = "()[]{}"
輸出:true
示例 3:
輸入:s = "(]"
輸出:false
示例 4:
輸入:s = "([)]"
輸出:false
示例 5:
輸入:s = "{[]}"
輸出:true
示例 6:
輸入:s = "}"
輸出:false
提示:
1 <= s.length <= 104
s 僅由括號 '()[]{}' 組成
Soulution:
public class L20IsValid { public static void main(String[] args) { String s = "()"; // true System.out.println(isValid(s)); s = "()[]{}"; // true System.out.println(isValid(s)); s = "(]"; // false System.out.println(isValid(s)); s = "([)]"; // false System.out.println(isValid(s)); s = "{[]}"; // true System.out.println(isValid(s)); s = "}"; // true System.out.println(isValid(s)); } /** * 儲存括號對應關係 */ static HashMap<Character, Character> bracketMap = new HashMap<Character, Character>() {{ put(')', '('); put(']', '['); put('}', '{'); }}; public static boolean isValid(String s) { Stack<Character> waitMatchStack = new Stack<>(); char[] chars = s.toCharArray(); for (char aChar : chars) { if (bracketMap.containsKey(aChar)) { if (waitMatchStack.isEmpty()) { return false; } else if (!bracketMap.get(aChar).equals(waitMatchStack.pop())) { return false; } } else { waitMatchStack.push(aChar); } } return waitMatchStack.isEmpty(); } }
Idea:
括號匹配,自然而然想到用棧解決。
不過要注意棧空的情況。
Reslut: