Esempio n. 1
0
int KMPIndex1(SqString s,SqString t)    /*修正的KMP算法*/
{
	int nextval[MaxSize],i=0,j=0;
	GetNextval(t,nextval);
	while (i<s.len && j<t.len) 
	{
		if (j==-1 || s.data[i]==t.data[j]) 
		{	
			i++;j++;	
		}
		else j=nextval[j];
	}
	if (j>=t.len)  
		return(i-t.len);
	else
		return(-1);
}
Esempio n. 2
0
    char *strStr(char *haystack, char *needle) {
     int hLen = strlen(haystack), nLen = strlen(needle);
     int i = 0, j = 0;
     int *next = (int*)malloc(sizeof(int)*nLen);
     GetNextval(needle, next);

     while(i<hLen&&j<nLen)
     {
         if(j == -1 || haystack[i] == needle[j])
         {
             i++;
             j++;
         }
         else
         {
             j = next[j];
         }
     }
     if(j==nLen)
        return haystack + i - j;
    else
        return nullptr;
    }