乙個字串的字首是從第乙個字元開始的連續若干個字元,例如」abaab」共有5個字首,分別是a, ab, aba, abaa, abaab。
我們希望知道乙個n位字串s的字首是否具有迴圈節。
換言之,對於每乙個從頭開始的長度為 i (i>1)的字首,是否由重複出現的子串a組成,即 aaa…a (a重複出現k次,k>1)。
如果存在,請找出最短的迴圈節對應的k值(也就是這個字首串的所有可能重複節中,最大的k值)。
輸入格式
輸入包括多組測試資料,每組測試資料報括兩行。
第一行輸入字串s的長度n。
第二行輸入字串s。
輸入資料以只包括乙個0的行作為結尾。
輸出格式
對於每組測試資料,第一行輸出 「test case #」 和測試資料的編號。
接下來的每一行,輸出具有迴圈節的字首的長度i和其對應k,中間用乙個空格隔開。
字首長度需要公升序排列。
在每組測試資料的最後輸出乙個空行。
資料範圍
2≤n≤1000000
輸入樣例:
3aaa
4abcd
12aabaabaabaab
0輸出樣例:
test case #1
2 23 3
test case #2
test case #3
2 26 2
9 312 4
#include
using namespace std;
const
int n =
1000010
;int n;
char str[n]
;int next[n]
;void
get_next()
//kmp演算法
}int
main()
puts(""
);}return0;
}
演算法15 字串的全排列
題 目 輸入乙個字串,列印該字串的所有排列。例如輸入字串abc,輸出其全排列為abc,acb,bac,bca,cab,cba。思 路 我們想一下,如果不程式設計,手工做的話,我們的基本考慮是 每次首先固定乙個字母,然後讓其餘的字母全排列 然後換乙個字母固定,再全排列其餘的字母,如此迴圈而已。換句話說...
10 3 字串逆序 15
輸入乙個字串,對該字串進行逆序,輸出逆序後的字串。輸入格式 輸入在一行中給出乙個不超過80個字元長度的 以回車結束的非空字串。輸出格式 在一行中輸出逆序後的字串。輸入樣例 hello world 輸出樣例 dlrow olleh include include int main int argc,c...
15 字串匹配問題
description given a text txt 0 n 1 and a pattern pat 0 m 1 write a function search char pat,char txt that prints all occurrences of pat in txt.you may...