萌新求助
查看原帖
萌新求助
90706
_jimmywang_27楼主2024/12/9 19:08

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;
}

这一段的原理是,栈中保存消不掉的符号在原串中的位置。每次尽可能消,那么做完 cic_i 后,我应该能知道以 ii 为右端点的最长合法串 [sttp+1,i][st_{tp}+1,i]。哪里出问题了?

可以的话麻烦给个 hack。

2024/12/9 19:08
加载中...