最长有效括号

用栈记录括号的下标,通过栈顶元素定位有效括号的起始位置,计算最长长度。若遇到左括号,将其下标入栈;若遇到右括号,先弹出栈顶元素,若弹出后栈为空,说明当前右括号是新的无效起始点,将其下标入栈;若栈非空,用当前下标减去栈顶元素,得到以当前右括号为结尾的有效括号长度,更新最大长度,以下是代码解析:


class Solution {public:
    int longestValidParentheses(string s) {
        stack<int> st;
        st.push(-1); // 初始参考点,简化长度计算
        int maxLen = 0;
        
        for (int i = 0; i < s.size(); ++i) {
            if (s[i] == '(') {
                st.push(i); // 左括号下标入栈
            } else {
                st.pop(); // 右括号匹配栈顶左括号
                if (st.empty()) {
                    st.push(i); // 栈空则记录当前右括号为新参考点
                } else {
                    // 计算当前有效括号长度
                    maxLen = max(maxLen, i - st.top());
                }
            }
        }
        return maxLen;
    }};


该解法时间复杂度为O(n),空间复杂度为O(n)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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