【算法】KMP

// 字符串匹配 KMP 算法
void kmp( char * mom, char * son ) // 字符串从1下标开始读,0位随便添一个,方便操作
{
    lenm = strlen( mom )-1;
    lens = strlen( son )-1;
    int k = 0;
    for( int i = 2; i <= lens; i++ )
    {
        while( k && son[i] != son[k+1] ) k = prefix[k];
        if( son[i] == son[k+1] ) k++;
        prefix[i] = k;
    }
    k = 0;
    for( int i = 1; i <= lenm; i++ )
    {
        while( k && mom[i] != son[k+1] ) k = prefix[k];
        if( mom[i] == son[k+1] ) k++;
        if( k == lens ) ans++, k = prefix[k];
    }
}


猜你喜欢

转载自blog.csdn.net/JarjingX/article/details/8662471