题解 | 有效括号序列

有效括号序列

https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2?tpId=295&tqId=23268&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return bool布尔型
     */
    bool isValid(string s) {
        stack<char> st;
        unordered_map<char, char> mapping = {
            {')', '('},
            {']', '['},
            {'}', '{'}
        };

        for (char c : s) {
            // 如果是闭括号
            if (mapping.find(c) != mapping.end()) {
                // 如果栈为空,用特殊字符表示
                char top_element = st.empty() ? '#' : st.top();

                // 如果栈顶元素不匹配当前闭括号对应的开括号
                if (top_element != mapping[c]) {
                    return false;
                }
                // 匹配成功,弹出栈顶元素
                st.pop();
            } else {
                // 如果是开括号,压入栈中
                st.push(c);
            }
        }

        // 最后检查栈是否为空
        return st.empty();
    }
};

为了解决这个问题,我们需要判断给定的括号字符串是否有效。有效的括号字符串必须满足以下条件:
每个开括号必须有对应的闭括号。
括号必须正确嵌套,即闭括号必须按顺序匹配最近的开括号。

方法思路
栈的使用:利用栈的后进先出(LIFO)特性来匹配括号。遍历字符串时,遇到开括号就压入栈中,遇到闭括号则检查栈顶元素是否与之匹配。
提前终止:如果遇到闭括号时栈为空或栈顶元素不匹配,可以立即返回false,因为这意味着括号不按正确顺序闭合。
最终检查:遍历完字符串后,如果栈为空,说明所有括号都正确匹配,返回true;否则返回false。

代码解释
初始化:创建一个空栈和一个字典mapping,用于存储闭括号到开括号的映射。
遍历字符:对于字符串中的每个字符:
如果是闭括号,检查栈顶元素是否匹配。若栈为空或栈顶元素不匹配,返回false。
如果是开括号,压入栈中。
最终检查:遍历结束后,栈为空则返回true,否则返回false。
这种方法确保在O(n)时间内解决问题,其中n是字符串的长度,空间复杂度为O(n)用于栈的存储。

栈/堆/队列 文章被收录于专栏

操作只能在栈顶进行 栈应用场景 函数调用栈 浏览器前进后退 括号匹配检查 表达式求值 变种队列 双端队列 (Deque):两端都可以入队和出队 优先队列 (Priority Queue):按优先级出队 循环队列:固定大小的循环使用空间 队列应用场景 消息队列 任务调度 广度优先搜索 打印任务队列 堆应用场景 优先队列实现 堆排序 Top K 问题 定时任务调度

全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
03-06 18:20
门头沟学院 Java
点赞 评论 收藏
分享
今天 16:04
已编辑
安徽农业大学 算法工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务