【栈】有效的括号字符串

题目:


/** 栈,有效括号的问题使用栈来解决
 * 思路:使用两个栈存储 左括号和星号
 *       从左到右遍历字符串。
 *       遇到左括号,将下标存到左括号栈。
 *       遇到星号,将下标存到星号栈。
 *       遇到右括号,左括号栈不为空弹出一个元素,
 *           左括号栈为空星号栈不为空,从星号栈弹出一个元素匹配。
 *           若都为空返回false。
 *       遍历结束,查看这两个栈是否为空。
 *       不为空,左括号栈的下标要小于星号栈的下标,否则返回false。
 *       若左括号栈为空返回True。不为空返回false。
 *
 * @auther start
 * @create 2023-11-22 9:05
 */
public class L678 {
    public boolean checkValidString(String s) {
        Deque<Integer> leftStack = new LinkedList<>();
        Deque<Integer> asterStack = new LinkedList<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(') {
                leftStack.push(i);
            } else if (c == '*') {
                asterStack.push(i);
            } else {
                if (!leftStack.isEmpty()) {
                    leftStack.pop();
                } else if (!asterStack.isEmpty()) {
                    asterStack.pop();
                } else {
                    return false;
                }
            }
        }
        while (!leftStack.isEmpty() && !asterStack.isEmpty()) {
            int left = leftStack.pop();
            int aster = asterStack.pop();
            if (left > aster) {
                return false;
            }
        }
        return leftStack.isEmpty();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值