求助算法的 正确性
查看原帖
求助算法的 正确性
270532
Kyo1337楼主2021/3/27 14:40

Rt,不论map的

N2log2NN^2\log_2{N}复杂度。

只求算法的正确性.

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<cstdio>
using namespace std;
map<string,bool>sor;
int nxt[10001][30],n,ans,tot,fir[300],st=114514;
string s,t,sufpre[100001];
int idx(char p)
{
	return (int)(p-'a')+1;
}
int main()
{
	scanf("%d",&n);
	cin>>s>>t;
	for(int i=0;i<n;i++)
	{   
	    string sp="";
		for(int j=i;j<n;j++)
		{
		sp+=t[j];
		if(!sor[sp]) sor[sp]=1,sufpre[++tot]=sp;
		}
	}
	for(int i=0;i<n;i++)
	{
		if(!fir[idx(s[i])]) fir[idx(s[i])]=i;
		for(int j=i+1;j<n;j++)
		if(!nxt[i][idx(s[j])]) nxt[i][idx(s[j])]=j;
	}
	for(int i=1;i<=tot;i++){
		int k=0,p=fir[idx(sufpre[i][0])];
		for(k=0;k<sufpre[i].size();k++){
			if(s[p]==sufpre[i][k]) p=nxt[p][idx(sufpre[i][k+1])];
			else break;
		}
		if(k==sufpre[i].size()) ans++;
	}
	cout<<ans;
}
/*20
egebejbhcfabgegjgiig
edfbhhighajibcgfecef*/
/*5 
bcabc
bbcca*/
2021/3/27 14:40
加载中...