注意数组下标及因下标为负值而造成的数组越界问题。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N=1000005;
string s;
int f[N],ans;
int main(){
cin>>s;
int len=s.length();
for(int i=1;i<len;i++){
if(s[i]=='('||s[i]=='[') continue;
else{
if(((s[i]==')'&&s[i-1-f[i-1]]=='(')||(s[i]==']'&&s[i-1-f[i-1]]=='['))&&i-2-f[i-1]>=0){
f[i]=f[i-1]+2+f[i-f[i-1]-2];
ans=max(f[i],ans);
}
}
}
for(int i=0;i<len;i++){
if(f[i]==ans){
for(int j=i-ans+1;j<=i;j++){
printf("%c",s[j]);
}
return 0;
}
}
return 0;
}