给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”
示例 2:
输入: “)()())”
输出: 4
解释: 最长有效括号子串为 “()()”
#include <iostream>
#include <algorithm>
#include <stack>
#include <cstring>
using namespace std;
const int maxn = 1e5 + 10;
struct node{
int id;
char c;
node(){
}
node(int _id, char _c) {
id = _id, c = _c;
}
};
int a[maxn];
int main() {
stack<node>st;
string str;
cin >> str;
for(int i = 0; i < str.size(); i ++) {
if(str[i] == ')') {
if(st.empty() || st.top().c == ')') {
st.push(node(i, ')'));
continue;
}
else {
node cur = st.top();
st.pop();
a[cur.id] = 1;
a[i] = 1;
}
}
else
st.push(node(i, '('));
}
int ans = 0, tem = 0;
for(int i = 0; i < str.size(); i ++) {
if(a[i] == 1)
tem++, ans = max(ans, tem);
else
tem = 0;
}
cout << ans << endl;
return 0;
}
class Solution {
const int maxn = 1e5 + 10;
struct node{
int id;
char c;
node(){
}
node(int _id, char _c) {
id = _id, c = _c;
}
};
int a[100000] = {0};
public:
int longestValidParentheses(string s) {
stack<node>st;
string str = s;
// cout << s << endl;
// cin >> str;
for(int i = 0; i < str.size(); i ++) {
if(str[i] == ')') {
if(st.empty() || st.top().c == ')') {
st.push(node(i, ')'));
continue;
}
else {
node cur = st.top();
st.pop();
a[cur.id] = 1;
a[i] = 1;
}
}
else
st.push(node(i, '('));
}
int ans = 0, tem = 0;
for(int i = 0; i < str.size(); i ++) {
if(a[i] == 1)
tem++, ans = max(ans, tem);
else
tem = 0;
}
// cout << ans;
// return 0;
return ans;
}
};