前言
思路
括号匹配 显然是 使用 s t a c k stack stack了,但是统计答案应该怎么统计呢 ?
显然其中有一个非常直接的思路 对于每一次成功匹配我们就统计答案
然后我们的 s t a c k < c h a r > stack<char> stack<char> 转换为 s t a c k < i n t > stack<int> stack<int>便于统计, 这样子我们只需要判断
是否合法即可,如果不合法那么当前的栈头退出栈,否则将当前合法的位置加入队列中
然后我们每次更新答案即可
CODE
void solve()
{
int ans = 0 ;
string s;cin>>s;
int len = s.size();
for(int i = 0; i<len;i++){
if(!stk.empty()){
char t = s[stk.top()];
if (s[i] == ')' && t == '(' || s[i] == ']' && t == '[' || s[i] == '}' && t == '{')
stk.pop();
else stk.push(i);
}else
stk.push(i);
if(stk.size())
ans = max(ans,i - stk.top());
else
ans = max(ans,i+1);
}
cout<<ans<<endl;
}