地址:https://ac.nowcoder.com/acm/problem/50998
思路:利用栈记录入栈的字符与其下标位置,从头处理字符串,对于str[i],若栈头元素与其匹配,则将其从退栈,并求其长度并保存最大长度,若不匹配则入栈。
Code:
#include<iostream>
#include<stack>
#include<map>
using namespace std;
typedef pair<char,int> pr;
int main()
{
string str;
stack<pr> sta;
map<char,int> imp={{'(',1}, {')',-1}, {'[',2}, {']',-2}, {'{',3}, {'}',-3}};
int res=0;
cin>>str;
for(int i=0;i<str.size();++i)
{
if(!sta.empty()&&imp[str[i]]<0&&imp[sta.top().first]+imp[str[i]]==0){
sta.pop();
if(sta.empty()) res=i+1;
else res=max(res,i-sta.top().second);
}else sta.push({str[i],i});
}
cout<<res<<endl;
return 0;
}