目 录CONTENT

文章目录

Leetcode 20. 有效的括号

小王同学
2024-03-17 / 0 评论 / 0 点赞 / 44 阅读 / 0 字

Leetcode 20. 有效的括号

力扣传送门(opens new window)

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

解题思路:

遍历字符串,遇到左括号就入栈,遇到右括号就判断栈顶的左括号与其是否匹配

如果匹配则继续遍历,不匹配则返回 false。

最后,如果栈为空,则说明所有括号都匹配,返回 true;否则,返回 false。

代码实现:

方法一:


import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            // 遇到左括号入栈
            if (c == '(' || c == '[' || c == '{') {  
                stack.push(c);
            } else {
                // 如果栈为空,说明右括号没有对应的左括号,返回 false
                if (stack.isEmpty()) {  
                    return false;
                }
                // 弹出栈顶元素
                char top = stack.pop();  
                if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
                    // 如果右括号与栈顶元素不匹配,返回 false
                    return false;
                }
            }
        }

        return stack.isEmpty();  // 栈为空表示所有括号都匹配,返回 true;否则返回 false
    }
}


方法二:

import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        // 如果字符串为空,返回 false
        if (s == null || s.length() == 0) {  
            return false;
        }
        Stack<Character> stack = new Stack();

        for (int i = 0; i < s.length(); i++) {
            // 遇到左括号 '(',将对应的右括号 ')' 入栈
            if (s.charAt(i) == '(') {  
                stack.push(')');
            // 遇到左括号 '[',将对应的右括号 ']' 入栈
            } else if (s.charAt(i) == '[') {  
                stack.push(']');
            // 遇到左括号 '{',将对应的右括号 '}' 入栈
            } else if (s.charAt(i) == '{') {  
                stack.push('}');
            } else if (stack.isEmpty() || s.charAt(i) != stack.peek()) {
                // 如果栈为空或者当前字符不是栈顶元素的对应右括号,返回 false
                return false;
            } else {
                // 当前字符是栈顶元素的对应右括号,将栈顶元素出栈
                stack.pop();  
            }
        }
        // 栈为空表示所有括号都匹配,返回 true;否则返回 false
        return stack.isEmpty();  
    }
}

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区