Assignment Problem
用KMP算法在给定的字符串中查找子串。
Input
输入两个字符串,第一个是主串,第二个是子串。
Output
输出子串第一次出现在主串中的位置(从0开始)。假如子串不在主串中,则输出-1。
Sample Input | Sample Output |
abcdef cd abcdef gh | 2 -1 |
# include<iostream>
# include <cstring>
using namespace std;
int next1[70];
void getNext(char *T)
{
int i=0,j=-1;
next1[0]=-1;
while(i<strlen(T))
{
if(j==-1||T[i]==T[j])
{
i++;
j++;
next1[i]=j;
}
else j=next1[j];
}
}
int index_KMP(char *S,char *T)
{
int i=0,j=0;
int lenS = strlen(S);
int lenT = strlen(T);
while(i<lenS&&j<lenT)
{
if(j==-1||S[i]==T[j])
{
i++;
j++;
}
else j=next1[j];
}
if(j==lenT) return i-j;
else return -1;
}
int main()
{
char S[1000],T[70];
cin>>S>>T;
getNext(T);
cout<<index_KMP(S,T)<<endl;
return 0;
}