Rt,不论map的
N2log2N复杂度。
只求算法的正确性.
#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*/