Leetcode20. 有效的括号 -hot100-代码随想录-春招冲刺

文章讲述了五个不同版本的C++类`Solution`,用于解决字符串中括号是否有效匹配的问题。这些版本通过栈来验证左括号与右括号的配对,展示了逐步优化的过程,以及对时间复杂度的考虑。
摘要由CSDN通过智能技术生成

题目:


代码(首刷自解 2024年1月21日):

class Solution {
    bool check(char ch1,char ch2) {
        if(ch1 == ')' && ch2 != '(') return true;
        else if(ch1 == ']' && ch2 != '[') return true;
        else if(ch1 == '}' && ch2 != '{') return true;
        else return false;
    }
public:
    bool isValid(string s) {
        if (s.size() < 2) return false;
        stack<char> stk;
        for (int i = 0; i < s.size(); ++i) {
            if (stk.empty()) {
                if(s[i] == ')' || s[i] == '}' || s[i] == ']') return false;
                else stk.push(s[i]);
            }else{
                if(s[i] == '(' || s[i] == '{' || s[i] == '[') stk.push(s[i]);
                else{
                    if(check(s[i],stk.top())) return false;
                    else{
                        stk.pop();
                        continue;
                    }
                }
            }
        }
        return stk.empty() ? true : false;
    }
};

时间复杂度高

代码(二刷看解析 2024年1月21日):

class Solution {
public:
    bool isValid(string s) {
        int n = s.size();
        if (n % 2 != 0) return false;
        stack<char> stk;
        for (int i = 0; i < n; ++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();
    }
};

代码(三刷自解 2024年3月8日)

class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
                st.push(s[i]);
            } else {
                if (st.empty()) {
                    return false;
                }

                if ((s[i] == ')' && st.top() == '(') ||
                    (s[i] == ']' && st.top() == '[') ||
                    (s[i] == '}' && st.top() == '{')) {
                    st.pop();
                } else {
                    return false;
                }
            }
        }
        return st.empty();
    }
};


代码(四刷自解 2024年3月28日)

class Solution {
public:
    bool isValid(string s) {
        // 栈
        stack<char> st;
        // 遍历 c : s
        for (auto& c : s) {
        // 左括号入栈
            if (c == '(' || c == '[' || c == '{') st.push(c);
        // 右括号和栈顶比较,若匹配栈顶出栈,不匹配return false;
            else {
                if (st.empty()) return false;
                if (c == ')' && st.top() != '(') return false;
                if (c == ']' && st.top() != '[') return false;
                if (c == '}' && st.top() != '{') return false;
                st.pop();
            }
        }
        // 根据最终栈中是否有元素返回true/false
        return st.empty();
    }
};

代码(五刷自解 2024年5月4日)

class Solution {
public:
    bool isValid(string s) {
        // 栈,保存左括号,遇到匹配的右括号出栈
        stack<char> stk;
        for (char ch : s) {
            if (ch == '{' || ch == '[' || ch == '(') {
                stk.push(ch);
            } else if (stk.empty()) {
                return false;
            } else if (ch == '}' && stk.top() == '{') {
                stk.pop();
            } else if (ch == ']' && stk.top() == '[') {
                stk.pop();
            } else if (ch == ')' && stk.top() == '(') {
                stk.pop();
            } else {
                return false;
            }
        }
        return stk.empty();
    }
};

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值