LeetCode20. 有效的括号

题目

分析

括号不匹配分为三种情况:左括号多了,右括号多了,不多不少但类型不匹配。

我们用一个栈保存左括号的应该匹配的右括号,就是每遇到一个左括号,将相应类型的右括号压栈。为什么要这样想 ?因为括号匹配的要求是:

1.左括号必须用相同类型的右括号闭合。

2.左括号必须以正确的顺序闭合。

尤其是第二条这就是栈的应用。

如何判断左括号多了? 遍历完了字符串发现栈不为空。

如何判断右括号多了?在匹配过程中,遍历字符产还没结束,栈反而空了

如何判断匹配成功?字符串遍历完后,栈空。

复制代码
 1 class Solution {
 2 public:
 3     bool isValid(string s) {
 4         stack<char>stk;
 5         for(int i = 0;i < s.length();i++){
 6             if(s[i] == '(' ) stk.push(')');
 7             else if(s[i] == '[') stk.push(']');
 8             else if(s[i] == '{') stk.push('}');
 9             else if(stk.empty() || s[i] != stk.top()) {return false;}
10             else stk.pop();
11         }
12         return stk.empty();
13     }
14 };
复制代码

 

class Solution {
public:
    bool isValid(string s) {
        stack<char>stk;
        for(int i = 0;i < s.length();i++){
            if(s[i] == '(' ) stk.push(')');
            else if(s[i] == '[') stk.push(']');
            else if(s[i] == '{') stk.push('}');
            else if(stk.empty() || s[i] != stk.top()) {return false;}
            else stk.pop();
        }
        return stk.empty();
    }
};
posted @ 2021-01-26 16:49  Uitachi  阅读(67)  评论(0)    收藏  举报
编辑推荐:
· 记一次 C# 平台调用中因非托管 union 类型导致的内存访问越界
· [EF Core]聊聊“复合”属性
· 那些被推迟的 C# 14 特性及其背后的故事
· 我最喜欢的 C# 14 新特性
· 程序员究竟要不要写文章
阅读排行:
· 我是不是很有钱?
· 遭遇疯狂 cc 攻击的一个周末
· 【EF Core】聊聊“复合”属性
· GPT‑5 重磅发布
· 美丽而脆弱的天体运动:当C#遇见宇宙混沌
点击右上角即可分享
微信分享提示