categories: [Blog,Algorithm]


20. 有效的括号

难度简单2197
给定一个只包括 '('')''{''}''['']' 的字符串 s,判断字符串是否有效。
有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。


    示例 1:
    输入:s = “()”
    输出:true

示例 2:
输入:s = “()[]{}”
输出:true

示例 3:
输入:s = “(]”
输出:false

示例 4:
输入:s = “([)]”
输出:false

示例 5:
输入:s = “{[]}”
输出:true

提示:

  • 1 <= s.length <= 10
  • s 仅由括号 '()[]{}' 组成。
  1. class Solution {
  2. public boolean isValid(String s) {
  3. int n = s.length();
  4. if (n % 2 == 1) {
  5. return false;
  6. }
  7. Map<Character, Character> pairs = new HashMap<Character, Character>() {{
  8. put(')', '(');
  9. put(']', '[');
  10. put('}', '{');
  11. }};
  12. //Deque<Character> stack = new LinkedList<Character>();
  13. Stack<Character> stack = new Stack();//这两个都可以ok
  14. for (int i = 0; i < n; i++) {
  15. char ch = s.charAt(i);
  16. if (pairs.containsKey(ch)) {//🈶️又括号,栈就不能为空(必须有左扩号)。
  17. if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
  18. return false;
  19. }
  20. stack.pop();
  21. } else {
  22. stack.push(ch);
  23. }
  24. }
  25. return stack.isEmpty();
  26. }
  27. }