rt,为什么这样写是错的:
int n,m;
char c[1000010];
char st[1000010];
int tp;
int mx,t;
int rep[10000];
int main(){
scanf("%s",c+1);n=strlen(c+1);
rep['(']=')';rep['[']=']';rep['{']= '}';
for(int i=1;i<=n;i++){
if(tp&&rep[c[st[tp]]]==c[i])tp--;
else st[++tp]=i;
mx=max(mx,i-st[tp]);
}cout<<mx;
return 0;
}
这一段的原理是,栈中保存消不掉的符号在原串中的位置。每次尽可能消,那么做完 ci 后,我应该能知道以 i 为右端点的最长合法串 [sttp+1,i]。哪里出问题了?
可以的话麻烦给个 hack。