NEFU 1318 字串的重複週期(KMP)

2021-08-14 23:51:04 字數 1322 閱讀 3339

problem:1318

time limit:1000ms

memory limit:65535k

給出字串 s,求出串s的所有字首中,是週期串的字首的長度 len 和他的最大重複週期 k

多組樣例。

對於每組樣例

第一行輸入串長 n (2<=n<=1e6)

第二行輸入串 s

對於所有的s,長度和小於1e7

對於s中是週期串的字首

要求輸出 k>1 的字首的長度 len 和最大重複週期 k

每乙個長度和週期用乙個空格分開。

3

aaa12

aabaabaabaab

2 2

3 32 2

6 29 3

12 4

對於第一組樣例 3 aaa

對於字首 'a' len = 1 ,k 最大為 1 不符合要求

對於字首 'aa' len = 2 ,k 最大為 2 週期串為 'a'

對於字首 'aaa' len = 3 ,k 最大為 3 週期串為 'a'

對於第二組樣例 12 aabaabaabaab

對於字首 'aa' len = 2 ,k 最大為 2 週期串為 'a'

對於字首 'aabaab' len = 6 ,k 最大為 2 週期串為 'aab'

對於字首 'aabaabaab' len = 9 ,k 最大為 3 週期串為 'aab'

對於字首 'aabaabaabaab' len = 12 ,k 最大為 4 週期串為 'aab'

dt2131

題意:中文題。

思路:用kmp求出next陣列。然後從前往後搜,對於每乙個i來說,週期都為i+1-next[i]。當週期能整除長度並且字首長度不為1的時候,那麼就輸出長度和最大重複週期。

**:#include #include #include #include using namespace std;

char t[1000005];

int ne[1000005];

char p[1000005];

void makenext(const char p,int ne,int len)

}int main()

{ int len;

while(~scanf("%d",&len))

{scanf("%s",t);

makenext(t,ne,len);

for(int i=0;i

JS字串常用方法(自) 3 字串重複

字串重複的函式是repeat 作用是對字串進行重複,引數是count 重複次數 返回值是成功操作的字串。repeat 作用 對字串進行重複 引數 count 重複次數 返回值 重複操作之後的字串 console.log abc repeat 2 abcabc 1 doctype html 2 htm...

2 6 字串找到字串的最長無重複子串

給定乙個字串str,返回str的最長無重複子串的長度。分析 1 滑動視窗 如何確定滑動視窗的首尾,2 實現 public intgetmaxnorepeat string str char chas str.tochararray int map newint 256 int pre 1 用於儲存最...

字串1 字串的旋轉

題目描述 給定乙個字串,要求將字串前面的若干個字元移到字串的尾部。例如 將字串 abcdef 的前三個字元 a b c 移到字串的尾部,那麼原字串將變成 defabc 首先想到的是將需要移動的字元乙個乙個移到字串的尾部。實現如下 public class transfet s n 1 t publi...