🤖
AI审核中

NC52 有效括号序列

文章摘要

本文介绍了判断仅含 '('、')'、'{'、'}'、'['、']' 六类字符的字符串是否为合法括号序列的问题,要求时间、空间复杂度均为 O(n)。核心思路是使用栈:遍历字符时,遇左括号将对应的右括号压入栈;遇右括号时检查栈顶是否匹配并弹出,若不匹配或栈为空则返回 false。遍历结束后,栈为空即为合法序列。代码实现基于 Java 的 `Stack<Character>`,通过上述方式实现了 O(n) 的解法。

题目链接:https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

题目描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

数据范围:字符串长度 0≤n≤10000

要求:空间复杂度 O(n),时间复杂度 O(n)

示例 1:

输入:"()[]{}"
返回值:true

示例 2:

输入:"[]"
返回值:true

示例 3:

输入:"([)]"
返回值:false

解题代码

import java.util.*;


public class Solution {
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        //辅助栈
        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() || stack.pop() != s.charAt(i)) {
                //必须有左括号的情况下才能遇到右括号
                return false;
            }
        }
        //栈中是否还有元素
        return stack.isEmpty();
    }
}

0 条评论

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧

评论区 0

头像
 0 条评论