LeetCode32.Longest-Valid-Parentheses<最长有效括号>

题目:

思路:

遍历括号.遇到右括号然后前一个是左括号 那就res+2,然后重定位 i 的值 并且长度减少2;

但是问题在于无法判断最长的括号.只能得到string内的全部括号长度.

错误代码:

写过一题类似的,那题是找括号数.记得是使用的栈,但是死活写不出来.

看完答案觉得答案有一些反常.

代码是:

cpp 复制代码
//code
 
class Solution {
public:
    int longestValidParentheses(string s) {
        int n = s.length();
        int res = 0;
        stack<int> st; // 栈用来记录左括号的位置
        st.push(-1); // 将-1压入栈中,作为一个"虚拟的"左括号位置
        for (int i = 0; i < n; i++) {
            if (s[i] == '(') { // 如果是左括号,将其位置压入栈中
                st.push(i);
            } else { // 如果是右括号
                st.pop(); // 弹出栈顶的左括号位置
                if (st.empty()) { // 如果栈为空,说明当前的右括号没有匹配的左括号
                    st.push(i); // 将当前的右括号位置压入栈中,作为下一个"虚拟的"左括号位置
                } else { // 如果栈不为空,计算当前的括号子串长度
                    res = max(res, i - st.top());
                }
            }
        }
        return res; // 返回最长有效括号长度
    }
};

在代码中当判断到右括号时 栈st 先 pop 然后再进行判断. 有点神奇..

相关推荐
插件开发7 分钟前
矢量路径运算如何选GPU技术?——适用算法对比及OpenGL/Direct3D/CUDA选型指南
算法·3d
c++之路17 分钟前
C/C++ 全链路编译工具汇总
c语言·开发语言·c++
c2385618 分钟前
C++的IO流深入理解(下)
开发语言·c++
8Qi818 分钟前
LeetCode 72:编辑距离(Edit Distance)—— 题解
算法·leetcode·职场和发展·动态规划
SoftLipaRZC25 分钟前
顺序表的应用:通讯录项目与经典算法实战
算法
8Qi825 分钟前
LeetCode 583. 两个字符串的删除操作
算法·leetcode·职场和发展·动态规划
某林21227 分钟前
ROS 2 与大模型融合实战:从进程连环崩溃到类型安全防御的深度排障复盘
c++·python·安全·机器人·人机交互·ros2
tigershang29 分钟前
卡尔曼滤波:不确定世界中的最优估计
人工智能·算法·机器学习
凡人叶枫30 分钟前
Effective C++ 条款02:宁可以编译器替换预处理器
java·linux·c语言·开发语言·c++
m0_7381207241 分钟前
渗透测试基础——PHP 序列化数据结构与反序列化机制详解
android·服务器·网络·数据结构·安全·php