ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

力扣 题目32-- 最长有效括号

2022-04-22 13:04:19  阅读:134  来源: 互联网

标签:匹配 括号 -- 32 jilu 力扣 int vec leftstk


题目


题解


 

在第20题 力扣 题目20-- 有效的括号 我采用了栈的方法匹配

那么这题应该可以利用栈去匹配 但是这题并不是问的一共匹配了多少 而是连续最长匹配了多少

我们想一下 通过栈可以找到所有匹配的括号 那么剩下的不就是没有匹配的吗?

以()(()为例

先vector<int> vec(s.size(),1); 那么此时vec里面是{1,1,1,1,1}

让匹配到的括号位置为0 匹配了之后 {0,0,1,0,0}

那么此时我们以1分割开来 然后数0 0数量最多的那个就是答案


代码

 1 #include<iostream>
 2 #include<stack>
 3 #include<string>
 4 #include<vector>
 5 using namespace std;
 6 
 7 class Solution {
 8 public:
 9     int longestValidParentheses(string s) {
10         int num = 0;
11         stack<int> leftstk;
12         vector<int> vec(s.size(),1);
13         int jilu = 0;
14         int max = 0;
15         //匹配
16         for (int i = 0; i < s.size(); i++) {
17             //40是左括号 左括号的位置放进栈
18             if (s[i] ==40) {
19                 leftstk.push(i);
20             }
21             else {
22                 //如果为空 就是单右括号不匹配不用改变
23                 if (leftstk.empty()) {
24                     continue;
25                 }
26                 else {
27                     //匹配成功 将匹配成功的两个括号位置的vector位置改变为0
28                     vec[i] = 0;
29                     vec[leftstk.top()] = 0;
30                     //出栈 匹配下一个
31                     leftstk.pop();
32                 }
33             }
34         }
35         //遍历vec 找到0最多的情况
36         for (int i = 0; i < vec.size(); i++) {
37             if (vec[i] == 0) {
38                 jilu = jilu + 1;
39             }
40             else
41             {
42                 jilu = 0;
43             }
44             if (max < jilu) {
45                 max = jilu;
46             }
47         }
48         return max;
49     }
50 };
51 
52 int main() {
53     Solution sol;
54     string s = ")(()(()(((())(((((()()))((((()()(()()())())())()))()()()())(())()()(((()))))()((()))(((())()((()()())((())))(())))())((()())()()((()((())))))((()(((((()((()))(()()(())))((()))()))())";
55     int num=sol.longestValidParentheses(s);
56     cout << num << endl;
57 }
View Code

 

标签:匹配,括号,--,32,jilu,力扣,int,vec,leftstk
来源: https://www.cnblogs.com/zx469321142/p/16178383.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有