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

无聊的阿库娅·2022-04-22 12:35·20 次阅读

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

题目


题解


 

在第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
复制代码

 

posted @   无聊的阿库娅  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
パティのテーマ - 神前暁
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
  1. 1 どんどんドーナツどーんと行こう! 浜口史郎
  2. 2 パティのテーマ 神前暁
  3. 3 今はその剣を置いて 川井憲次
点击右上角即可分享
微信分享提示
目录