題目:[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...