20. 有效的括号

发布于 2024-06-10  8 次阅读


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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

思路:可以想到用一个辅助栈,遇到左括号就push进栈,遇到右括号就和栈顶元素比较,如果符合就弹出栈顶元素,否则返回false。最后在判断栈是否为空,为空返回true;

用的leetcode网站写的有点丑陋。

public boolean isValid(String s) {
            Deque<Character> stack = new ArrayDeque<>();
            int n = s.length();
            for(int i = 0; i < n; i++){
                if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{'){
                    stack.offer(s.charAt(i));
                }else if(s.charAt(i) == ')' || s.charAt(i) == ']' || s.charAt(i) == '}'){
                    if(stack.isEmpty()){
                        return false;
                    }else{
                        if(stack.peekLast() == '(' && s.charAt(i) == ')'){
                            stack.pollLast();
                        }else if(stack.peekLast() == '[' && s.charAt(i) == ']'){
                            stack.pollLast();
                        }else if(stack.peekLast() == '{' && s.charAt(i) == '}'){
                            stack.pollLast();
                        }else{
                            return false;
                        }
                    }
                }
            }
            return true;
        }
人生の意味は平凡ですか、それとも素晴らしいですか?
最后更新于 2024-06-10