KMP求助
查看原帖
KMP求助
1039274
Cypher_404楼主2024/8/24 15:44

这道题是不能用 KMP 来做吗?我写完以后样例是过了,但是 WA 完了。

#include<bits/stdc++.h>
using namespace std;
int fail[100010];
char s2[100010];
int ans;
int main()
{
	int T;
	cin>>T;
    while(T--)
    {
    	int m;
    	scanf("%d",&m);
		scanf("%s",s2+1);
    	memset(fail,0,sizeof fail);
        for(int i=2,t=0;i<=m;i++)
        {
            while(t&&s2[i]!=s2[1+t]&&s2[1+t]!='?'&&s2[i]!='?')
            {
                t=fail[t];
            }
            if(s2[i]==s2[1+t]||s2[i]=='?'||s2[1+t]=='?')
            {
                t++;
            }
            fail[i]=t;
        }
        int maxn=0;
        for(int i=1;i<=m;i++)
        {
        	if(fail[i]*2<=m)
        	maxn=max(maxn,fail[i]);
		}
		cout<<maxn<<"\n";
    }
    return 0;
}

求 dalao 指点

2024/8/24 15:44
加载中...