鎷撳睍KMP绠楁硶 鍏ラ棬+妯℃澘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鎷撳睍KMP绠楁硶 鍏ラ棬+妯℃澘相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/segment' title='segment'>segment   浠g爜   鍖归厤   mp绠楁硶   href   鍗氬   xtend   text   鎵╁睍   

鎷撳睍KMP绠楁硶鍏ラ棬

鍗氬鎺ㄨ崘

鎵╁睍KMP绠楁硶, 鍥惧緢褰㈣薄锛屼唬鐮佸啓鐨勪篃寰堟竻鏅帮紝涓嬮潰鐨勬ā鏉垮氨鏄嚭鑷鍗氬鏂囩珷銆?/p>

鎷撳睍KMP鏄眰姣嶄覆S闀垮害涓?code>n鍜屽瓙涓?code>T闀垮害涓?code>m,姹?code>S鐨勬瘡涓€涓悗缂€瀛愪覆涓?code>T鐨勫墠缂€瀛愪覆鍖归厤鐨勬渶闀块暱搴︺€?/p>

浠g爜瀹炵幇

//姹傝В妯″紡涓睺鐨刵ext鏁扮粍锛岃繖涓嚱鏁板拰涓嬮潰鐨勫嚱鏁板嚑涔庣浉鍚?void getnext(string &T, int m, int[] next)
{
    int a = 0, p = 0;
    next[0] = m; //T瀛楃涓茶嚜韬拰鑷韩鍖归厤
    for(int i=1; i<m; i++)
    {
        if(i >= p || i + next[i - a] >= p)
        {
            if( i >= p)
                p = i;
            while(p < m && T[p] == T[p - i])
                p++;
            next[i] = p - i;
            a = i;
        }
        else next[i] = next[i - a];
    }
}
void getextend(string &S, int n, string &T, int m, int[] extend)
{
    int a=0, p=0;
    getnext(T, m, next);
    for(int i=0; i<n; i++)
    {
        if(i >= p || i + next[i - a] >= p)
        {
            if(i >= p)
                p = i;
            while(p < n && p - i < m && S[p] == T[p - i])
                p++;
            extend[i] = p - i;
            a = i;
        }
        else extend[i] = next[i-a];
    }
}

以上是关于鎷撳睍KMP绠楁硶 鍏ラ棬+妯℃澘的主要内容,如果未能解决你的问题,请参考以下文章

璁捐妯″紡

webpack鍏ラ棬-涓汉瀛︿範璧勬簮鏀堕泦

Tarjan 妯℃澘

Java鍏ラ棬(鍩虹绡囦竴)

鍊嶅鍏ラ棬

鍊嶅LCA妯℃澘