当前位置:网站首页>leetcode 32. 最长有效括号 (困难)
leetcode 32. 最长有效括号 (困难)
2022-08-09 08:18:00 【_刘小雨】
作者简介:C/C++ 、Golang 领域耕耘者,创作者
个人主页:作者主页
活动地址:CSDN21天学习挑战赛
题目来源: leetcode官网
如果感觉博主的文章还不错的话,还请关注 、点赞 、收藏🧡三连支持一下博主哦~~~
题目描述
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例1:
输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”
示例2:
输入:s = “)()())”
输出:4
解释:最长有效括号子串是 “()()”
示例 3:
输入:s = “”
输出:0
🧡 算法分析
此题方法之一是用栈
我们通过标记合法的括号,可以得出,每一段合法的括号在字符串出现的位置一定是连续且不相交的
做括号匹配的这题可以用栈存储相应的信息,算法过程为:
- 用栈维护当前待匹配的左括号的位置,同时用 start 记录一个新的可能合法的子串的起始位置,初始设为0
- 如果s[i] ==‘(’,那么把i进栈
- 如果s[i] == ‘)’,那么弹出栈顶元素 (代表栈顶的左括号匹配到了右括号),出栈后:
如果栈为空,说明以当前右括号为右端点的合法括号序列的左端点为start,则更新答案 i - start + 1
如果栈不为空,说明以当前右括号为右端点的合法括号序列的左端点为栈顶元素的下一个元素,则更新答案i - st.top()
4、遇到右括号)且当前栈为空,则当前的 start 开始的子串不再可能为合法子串了,下一个合法子串的起始位置必定是当前遍历位置 i + 1 开始,更新 start = i + 1。
5、最后返回答案即可
代码实现
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> st;
int re = 0;
for(int i = 0, start = 0; i < s.size(); i ++)
{
if(s[i] == '(') st.push(i);
else
{
if(st.size())
{
st.pop();
if(st.empty()) re = max(re, i - start + 1);
else re= max(re, i - st.top()); // 因为之前已经弹出来了一个元素 (st.top() + 1) - 1
}
else
start = i + 1; // 更新
}
}
return re;
}
};
执行结果:
时间复杂度分析
其中字符串只遍历一次, 时间复杂度为O(n)
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
🧡 收藏,你的青睐是我努力的方向!
️ 评论,你的意见是我进步的财富!
边栏推荐
- 3D软件开发工具HOOPS全套产品开发介绍 | HOOPS Visualize、HOOPS Publish
- SOLIDWORKS Simulation教程:计算物体的固有频率
- Servlet的实现原理解析(serverapplet)(服务端程序)
- get一个小技巧,教你如何在typora写文章上传图片到博客上
- uva11624 Fire! (双bfs)
- 如何生成dll文件 采用VS2017生成dll文件(动态库文件)和lib文件(静态库文件)以C语言为例
- eTS UI development learning
- pip3 source change to improve speed
- Conversion between number systems
- Introduction to Network Layer Protocols
猜你喜欢
随机推荐
The working principle of switch
Non-decreasing Array
jdbctemplate connects to sql server, the data found in the code is inconsistent with the database, how to solve it?
Different styles of Flask-restful
3D精彩案例,清软英泰建成综合轻量化显示平台!
BIM技术多牛逼?BIM技术在建筑工程行业的四大发展趋势
收藏!Solidworks从设计到制造流程解决方案 2022来了!
我这是来宣传一下
NAT地址转换的原理与配置
HOOPS是什么?这4款3D软件开发工具包你还不知道?
可能导致Loadrunner检查点中savecount为0的分析
6000 字+,帮你搞懂互联网架构演变历程!
世界顶尖3D Web端渲染引擎:HOOPS Communicator技术介绍(一)
主键id,Snowflake雪花算法,优点:生成有顺序的id,提高数据库的性能
进程同步与互斥问题纠错
Xpath之爬取全国城市名称学习
交换机基本原理与配置
Result consisted of more than one row
三层交换机原理及配置
如何生成dll文件 采用VS2017生成dll文件(动态库文件)和lib文件(静态库文件)以C语言为例