鎷撳睍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绠楁硶 鍏ラ棬+妯℃澘的主要内容,如果未能解决你的问题,请参考以下文章