#include<iostream>
#include<string>
using namespace std;
const int MAXN=101;
int next[MAXN];
void work(string s)
{
int cont = 0;
next[0]=-1;
next[1]=0;
for(int i = 2; i<=s.size(); i++)
{
cont = 0;
for(int j = 1; j<i; j++)
{
string s1(&s[0],&s[j]),s2(&s[i-j],&s[i]); //edge
if(s1==s2)
cont=s1.size();
}
next[i]=cont;
}
}
bool isSubs(string s1,string s2)
{
int i=0, j=0, m=s1.size(), n=s2.size() ;
while(i<m && j<n)
{
if(s1[i]==s2[j])
{
i++;
j++;
}
else
{
i++;
j=j-next[j];
}
}
if(j==n) return 1;
return 0;
}
int main()
{
string s("abcdabd");
while(cin>>s)
{
string subS;
cin>>subS;
work(subS);
cout<<isSubs(s,subS)<<endl;
}
}
KMP
最新推荐文章于 2024-11-16 09:45:51 发布