leetcode题解 20.有效的括号

  1. 有效的括号
    给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
    有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:使用栈

可以将给定字符串遍历,如果是遍历到的元素是{, (, [则进行入栈操作,如果遍历到的元素是}, ), ]则检测栈顶元素是否与之配对,若不配对则说明括号没有有效闭合,返回false;若配对则将栈顶元素出栈,再继续遍历下一个元素,直到遍历完成。由于左括号遇到匹配的右括号会出栈,所以如果字符串中的所有左括号与右括号是相等的,则最后栈会为空。
如:
()[]{}

  1. 遍历到(,将(入栈,此时栈中元素为(
  2. 遍历下一个元素为),由于()配对,将(出栈,此时栈为空
  3. 接着遍历下一个元素为[,将[入栈,此时栈中元素为[
  4. 遍历下一个元素为],由于[]配对,将[出栈,此时栈为空
  5. 接着遍历下一个元素为{,将{入栈,此时栈中元素为{
  6. 遍历下一个元素为}{}配对,将{出栈,此时栈为空,且遍历结束了,返回true。

示例代码:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            }
            else {
                if (stack.isEmpty()) {
                    return false;
                }

                char top = stack.pop();
                if (c == ')' && top != '(') {
                    return false;
                }
                if (c == ']' && top != '[') {
                    return false;
                }
                if (c == '}' && top != '{') {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值