字符串匹配之KMP算法

void GetNext(char s[], int len)
{
        Next[0] = -1;
        int j = -1;
        for (int i = 1; i < len; i++)
        {
                while(j > -1 && s[j+1] != s[i])
                        j = Next[j];
                if (s[j+1] == s[i]) j++;
                Next[i] = j;
        }
}
//计算s的Next数组
int KMP(char s[], int len, char t[], int l, int start, int ended) //在s中从start位置到ended位置之间匹配 t { GetNext(t, l); int j = -1; for (int i = start; i <= ended; i++) { while(j > -1 && t[j+1] != s[i]) j = Next[j]; if (t[j+1] == s[i]) j++; if (j == l-1) return i-l+1; } }

猜你喜欢

转载自www.cnblogs.com/ruthank/p/9486848.html