kmp演算法的解釋:字串匹配的kmp演算法-簡單易懂
點選開啟鏈結
總時間限制:
3000ms 記憶體限制: 65536kb
描述給定兩個字串a和b,我們定義a*b為他們的連線。例如,如果a=」abc」 而b=」def」, 則a*b=」abcdef」。 如果我們將連線考慮成乘法,乙個非負整數的乘方將用一種通常的方式定義:a^0=」」(空字串),a^(n+1)=a*(a^n)。
輸入每乙個測試樣例是一行可列印的字元作為輸入,用s表示。s的長度至少為1,且不會超過一百萬。最後的測試樣例後面將是乙個點號作為一行。
輸出對於每乙個s,你應該列印最大的n,使得存在乙個a,讓s=a^n
樣例輸入
abcd
aaaa
ababab
.
樣例輸出
1
43
提示
本問題輸入量很大,請用scanf代替cin,從而避免超時。
解題思路:
kmp。直接用stl的模板會超時。
以ababab為例,kmp演算法對應的next陣列為-1,0,0,1,2,3,4(next陣列第len個值),則含有的公共子串最長為len-next[len]=6-4=2,含有的公共子串個數為len/(len-next[len])=6/(6-4)=3;
同理對於ababa,對應的next陣列為-1,0,0,1,2,3,所以含有的公共子串長度為5-3=2,公共子串個數為5/2=2.5,顯然此時不能整除,即這種情況含有的公共子串個數直接記為1。
常用的kmp演算法部分:
void getnext(char s)
else
j=next[j]; }}
int main()
else
} return 0;
}
poj 2406 字串乘方
2406 字串乘方 總時間限制 3000ms 記憶體限制 65536kb 描述給定兩個字串a和b,我們定義a b為他們的連線。例如,如果a abc 而b def 則a b abcdef 如果我們將連線考慮成乘法,乙個非負整數的乘方將用一種通常的方式定義 a 0 空字串 a n 1 a a n 輸入每...
字串處理 poj1035
本身是個一眼能看出演算法的水題,但是實現還是出了很多問題。一開始列舉的太奔放。直接t掉 然後腦抽在了乙個地方 其實只要在第乙個不同的位置新增或者刪除就可以 最近的狀態也是非常差,水題都做的艱辛,insert和delete借鑑了小優前輩的寫法。include include include inclu...
ORACLE in 字串,字串,字串
因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...