20. 有效的括号


20. 有效的括号

难度简单 2197

给定一个只包括 '('')''{''}''['']' 的字符串 s,判断字符串是否有效。

有效字符串需满足:

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

示例 1:

输入:s = “()”

输出:true

示例  2:

输入:s = “()[]{}”

输出:true

示例  3:

输入:s = “(]”

输出:false

示例  4:

输入:s = “([)]”

输出:false

示例  5:

输入:s = “{[]}”

输出:true

提示:

  • 1 <= s.length <= 10<sup>4</sup>
  • s 仅由括号 '()[]{}' 组成。
class Solution &#123;
    public boolean isValid(String s) &#123;
        int n = s.length();
        if (n % 2 == 1) &#123;
            return false;
        &#125;

        Map<Character, Character> pairs = new HashMap<Character, Character>() &#123;&#123;
            put(')', '(');
            put(']', '[');
            put('&#125;', '&#123;');
        &#125;&#125;;
        //Deque<Character> stack = new LinkedList<Character>();
        Stack<Character> stack = new Stack();//这两个都可以ok
        for (int i = 0; i < n; i++) &#123;
            char ch = s.charAt(i);
            if (pairs.containsKey(ch)) &#123;//🈶️又括号,栈就不能为空(必须有左扩号)。
                if (stack.isEmpty() || stack.peek() != pairs.get(ch)) &#123;
                    return false;
                &#125;
                stack.pop();
            &#125; else &#123;
                stack.push(ch);
            &#125;
        &#125;
        return stack.isEmpty();
    &#125;
&#125;

文章作者:   future
版权声明:   本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 future !
 上一篇
155. 最小栈 155. 最小栈
155. 最小栈难度简单 820 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。
下一篇 
141. 环形链表 141. 环形链表
categories: [Blog,Algorithm] 141. 环形链表 public boolean hasCycle(ListNode head) &#123; ListNode fast=head,s
2021-03-02 future
  目录