字串週期的問題

2022-08-24 20:42:16 字數 1231 閱讀 4927

如果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

要求字典序最小和字典序最大的表示出現了多少次。

1

#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 }

view code

字串週期

如果乙個字串可以由某個長度為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的重複字串所連線成的,...