如何徹底禁止 macOS Monterey 自動更新,去除更新標記和通知
阿新 • • 發佈:2022-05-08
有效的括號
題目
給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。示例 1:
輸入: "()"
輸出: true
示例 2:輸入: "()[]{}"
輸出: true
示例 3:輸入: "(]"
輸出: false
示例 4:輸入: "([)]"
輸出: false
示例 5:輸入: "{[]}"
輸出: true來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/valid-parentheses
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解決方法
思路
- 棧先入後出特點正好能滿足題目要求,有左括號就入棧,右括號就取棧頂左括號,判斷是否有效。
- 通過Map鍵值對建立左右括號對應關係。
演算法
- 如果是左括號,就入棧 push。
- 以外就取出棧頂的左括號 pop,通過取出的左括號為key在Map中找到對應的value,與當前括號比較。
class Solution{ private HashMap<Character,Character> mappings; public Solution(){ this.mappings = new HashMap<Character,Character>(); this.mappings.put('(', ')'); this.mappings.put('[', ']'); this.mappings.put('{', '}'); } public boolean isValid(String s) { Stack<Character> stack = new Stack<Character>(); for (Character c : s.toCharArray()) { if (mappings.containsKey(c)) { stack.push(c); } else { char top = stack.empty() ? '#' : stack.pop(); if (c != mappings.get(top)) { return false; } } } return stack.isEmpty(); } }