每篇题解基本都有这一句:
if(s[i]=='('||s[i]=='[') continue;
感觉不需要啊,在匹配的时候应该就会自然排除掉
我的代码:
#include<cstdio>
#include<cstring>
const int N=1000010;
char s[N];
int f[N],ma,id;
bool match(int i,int j){
return s[i]=='('&&s[j]==')'||
s[i]=='['&&s[j]==']';
}
int main(){
scanf("%s",s);
int l=strlen(s);
for(int i=1;i<l;i++){
int p=i-f[i-1]-1;
if(match(p,i))
f[i]=f[i-1]+2+f[p-1];
if(f[i]>ma){
ma=f[i];
id=i;
}
}
int L=id-f[id]+1,R=id;
for(int i=L;i<=R;i++)
putchar(s[i]);
return 0;
}
可以AC
刚刚测了一下题解,删掉后也可以AC
是我哪里想错了吗?求指证