Leetcode:有效的括号

题目链接:20. 有效的括号 - 力扣(LeetCode)

普通版本(辅助栈 + 哈希表)

cpp 复制代码
class Solution {
public:
    bool isValid(string s) {
        unordered_map<char,int> m{{'(',1},{'[',2},{'{',3},
                                {')',4},{']',5},{'}',6}};//使用哈希表将左右括号与数字关联,便于后续使用

        stack<char> st;
        bool istrue=true;//
        for(char c:s)
        {
            int flag=m[c];//获取字符串s的某个字符对应的数字
            if(flag>=1&&flag<=3)//如果是左括号就将其入栈
            {
                st.push(c);
            } 
            else if (!st.empty() && m[st.top()] == flag-3)//如果当前栈不为空,且当前字符是栈顶元素对应的右括号,就将栈顶元素出栈
            {//不为空empty()返回false,为空返回true
                st.pop();
            }
            else
            {
                istrue=false;
                break;
            }
        }
        if(!st.empty()) //循环结束后栈不为空,就表示括号没有消完,所以该字符串s无效
        {
            istrue=false;
        }
        return istrue;
    }
};

时间复杂度:O(N)

空间复杂度:O(N)(最坏情况下字符串s全是左括号没有右括号,此时栈的长度就是字符串s的长度)

优化版本(待补充)

~over~

相关推荐
sonadorje6 分钟前
逻辑回归中的条件概率
算法·机器学习·逻辑回归
cici1587412 分钟前
基于Pan-Tompkins算法的ECG信号HRV提取方案
算法
McGrady-17533 分钟前
拓扑导航 vs 几何导航的具体实现位置
算法
副露のmagic41 分钟前
更弱智的算法学习 day24
python·学习·算法
颜酱43 分钟前
前端必备动态规划的10道经典题目
前端·后端·算法
wen__xvn1 小时前
代码随想录算法训练营DAY10第五章 栈与队列part01
java·前端·算法
cpp_25012 小时前
P2708 硬币翻转
数据结构·c++·算法·题解·洛谷
程序猿阿伟2 小时前
《Python复杂结构静态分析秘籍:递归类型注解的深度实践指南》
java·数据结构·算法
bubiyoushang8882 小时前
LFM脉冲串信号的模糊函数
算法
踩坑记录2 小时前
leetcode hot100 11.盛最多水的容器 medium 双指针
算法·leetcode·职场和发展