《演算法競賽高階指南》1 5字串

2021-09-22 19:35:29 字數 1064 閱讀 8833

乙個字串的字首是從第乙個字元開始的連續若干個字元,例如」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...