LeetCode Hot100 之 17 有效的括号

题目

分析

思路一

建一个哈希表来存<char,char>的键值对,其中前一个为左括号,后一个为右括号。并且还需要一个栈来存放字符中的括号,遍历字符串,当遇到左括号时先加入栈中,因为它们是不完整的;那么遇到右括号,则检测目前栈顶是否其对应的左括号,如果是则将栈顶括号弹出。一直遍历,到最后这个栈空掉了就说明都有其对应的括号。

代码

cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
        unordered_map<char,char>kuohao;
        kuohao['('] = ')';
        kuohao['['] = ']';
        kuohao['{'] = '}';
        stack<char>tmp;
        for(auto c : s){//遍历加入栈中
            if(tmp.empty()){
                tmp.push(c);
            }
            else{
                char temp = tmp.top();
                if(c == kuohao[temp]){//如果匹配则弹出
                    tmp.pop();
                }
                else{
                    tmp.push(c);//否则就加入栈中
                }
            }
        }
        if(tmp.empty()){//如果最后栈为空则说明是有效的括号串
            return true;
        }
        else{
            return false;
        }
    }
};

结果

思路二

不去单独建一个表存括号对,而是遇到左括号去把右括号压进栈,如果真的遇到右括号那么检测栈顶是否是这个右括号,也就是说明前一个是其对应的左括号。

代码

cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
        if (s.length() % 2) {//奇数长度的字符串不可能全部有效
            return false;
        }
        stack<char> st;
        for(char c:s){
            if(c =='(') st.push(')');
            else if (c=='[') st.push(']');
            else if (c=='{') st.push('}');
            else{
                if(st.empty() || st.top() != c){//对应不上,则为假
                    return false;
                }
                st.pop();
            }
        }
        return st.empty();
    }
};

结果

相关推荐
嵌入式ZYXC1 分钟前
第2篇:《面试题:LDO和DC-DC的区别?分别用在什么场景?》
stm32·单片机·嵌入式硬件·面试·职场和发展
小O的算法实验室7 分钟前
2025年IEEE TASE,基于双层耦合平均场博弈的大规模智能体集成任务分配与轨迹规划
人工智能·算法·机器学习
8Qi812 分钟前
LeetCode 337:打家劫舍 III(House Robber III)—— 题解 ✅
算法·leetcode·二叉树·动态规划
地平线开发者13 分钟前
从 INT64 Div 算子约束到 Cast 修复全流程
算法
2601_9611940213 分钟前
教资科三美术考什么|初中高中美术题型考点和模板资料
leetcode·elasticsearch·职场和发展·蓝桥杯·pat考试·lucene
AI科技星16 分钟前
基于奇合数边界的离散解析数论与双螺旋宇宙本体大统一体系论文全部数学公式汇总表
人工智能·算法·机器学习·架构·学习方法
地平线开发者27 分钟前
Horizon 模型多 Batch 配置
算法·自动驾驶
我命由我1234535 分钟前
工程中安全帽颜色含义
运维·经验分享·学习·职场和发展·求职招聘·职场发展·学习方法
czhaii39 分钟前
GB2312简体中文编码表
单片机·算法
8Qi81 小时前
LeetCode 121 & 122:股票买卖问题(DP 对比题解)✅
算法·leetcode·职场和发展·动态规划