poj 2046 迴圈子串問題

2021-08-07 04:06:19 字數 719 閱讀 3987

題目:[poj-2046]

這個題目有個結論:

若s存在迴圈子串,當且僅當,len可以被len - prefix[len-1]整除。連線次數為len / len-prefix[len-1].

充分性我不會證明,我就證明下必要性吧。

不放假設s = pattern * n; len = strlen(s);

顯然prefix[ len - 1 ] = pattern*(n-1),這個是最長的公共字首字尾長度。

那麼,迴圈節的長度為len - prefix[len - 1],也就是len(pattern)。

所以,此時len可以整除len - prefix[len-1].cycle = len - prefix[len-1].

#include 

#include

#define len 1000000 + 10

char str[len];

int prefix[len];

void set_prefix( int n );

int main( void )

return0;}

void set_prefix( int n )

if( str[i] == str[k] )

prefix[i] = k + 1;

else

prefix[i] = 0;

}}

最長迴圈子串 C語言

description 編寫程式求給出的字串中的最長迴圈子串。input agbhkddkhbtr output bhkddkhb 方法1 中心擴充套件法 演算法思想 從左到右將每乙個字元當作回文串的中心,進行擴充套件,以此找到最長的回文串。時間複雜度 擴充套件後的字串長度為 2 n 1 對每乙個字...

四 不同的迴圈子字串(Biweekly17)

題目描述 給你乙個字串 text 請你返回滿足下述條件的 不同 非空子字串的數目 可以寫成某個字串與其自身相連線的形式。例如,abcabc 就是 abc 和它自身連線形成的。示例 1 輸入 text abcabcabc 輸出 3 解釋 3 個子字串分別為 abcabc bcabca 和 cabcab...

字串 迴圈移位問題

字串迴圈移位問題是面試中比較容易遇到的,就是輸入乙個字串和乙個整數,原地輸出移位後的字串。不同的考官可能對程式的具體要求不同,這裡要求空間複雜度為o 1 這裡給出兩種解答方法。1 將移動n位看做 每次移動一位,共操作n次 這是一種化整為零的思維方法。只要能想到這一步,相信下面的 就不難寫出了 1 v...