如果s1s2s3s4...sn = s3s4s5...sns1s2
那麼說明s1=s2,s2=s3,s3=s4,s4=s5....
說明這個字串是乙個週期串。
更一般的情況是 s(i)s(i+1)...s(n)s(1)...s(i-1) = s(j)s(j+1)..s(n)s(1)...s(j-1) i!=j
那麼說明以i開始的字串是乙個週期串。
題目:給我們乙個字串,要我們求它的最小表示,輸出從哪個位置開始, 如果有多個, 那麼返回最大的位置。
首先,用最小表示法求得開始位置最小的,然後用kmp求得迴圈節,然後強行移到最後。
當然了,也可以求出字典序最小的出現了多少次。
比如hdu3374
要求字典序最小和字典序最大的表示出現了多少次。
1view code#pragma warning(disable:4996)
2 #include 3 #include 4 #include
5 #include 6 #include
7 #include 8 #include 9 #include
10 #include 11 #include 12 #include 13
using
namespace
std;
1415
const
int n = 1000000 + 10;16
char
str[n];
17char
tmp[n];
18int
next[n];
19void getnext(char *str,int
n)20
31else
32 j =next[j];33}
34}3536
int minimalrepresentation(char *str, int
n)3754}
55return i < j ?i : j;56}
57int maxrepresentation(char *str, int
n)5876}
77return i < j ?i : j;78}
79int solve(char *str, int
n)80
84int
main()
85101
return0;
102 }
字串週期
如果乙個字串可以由某個長度為k的字串重複多次得到,則稱該串以k為週期。例如abcabcabcabc以3位週期 同時它也以6和12為週期 輸入乙個長度不超過80的字串,輸出其最小週期。1 字串長度可以整除週期 2 如果乙個字串以t為週期,那麼在字串範圍內,存在 s i s i t 可以使用窮舉的方式來...
XIOI 字串的週期
題目描述 給出乙個長度為n的由asc碼從97到126之間的字元組成的字串s,我們想知道s的字首中哪些是週期性的 週期至少為2 也就是說對任一i 2 i n s的前i個字元是否可以表示為ak,ak 表示字串a重複k次形成的字串,如aab2 aabaab,如果s的前i個字元可以表示成ak,求出最大的k。...
藍橋杯 週期字串 字串處理
演算法提高 週期字串 時間限制 1.0s 記憶體限制 256.0mb 問題描述 右右喜歡聽故事,但是右右的媽媽總是講一些 從前有座山,山里有座廟,廟裡有個老和尚給小和尚講故事,講的什麼呢?從前有座山 這樣迴圈的故事來搪塞右右。我們定義,如果乙個字串是以乙個或者乙個以上的長度為k的重複字串所連線成的,...