KMP裸题。。
难度:2
class Solution
{
public:
int Fail[400010];//j=fail[i]意为0,,,,,j-1=i-j,,,,,,,i-1
void getFail(char *P)
{
int m=strlen(P);
Fail[0]=0;
Fail[1]=0;
for(int i=1; i<m; i++)
{
int j=Fail[i];
while(j&&P[i]!=P[j]) j=Fail[j];
Fail[i+1]=P[i]==P[j]?j+1:0;
}
}
char *strStr(char *T, char *P)
{
int n=strlen(T),m=strlen(P);
if(m ==0)
{
return T;
}
if(n == 0)
{
return NULL;
}
getFail(P);
int j=0;
for(int i=0; i<n; i++)
{
while(j&&P[j]!=T[i]) j=Fail[j];
if(P[j]==T[i]) j++;
if(j==m) return i-m+1+T;
}
return NULL;
}
};