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 }