求最長重複真子串

2021-09-18 08:21:58 字數 833 閱讀 7190

題目敘述

給定乙個字串str,求其最長重複真子串s。

注意:s的串長length小於str的串長length。

輸入格式:

輸入乙個字串str,以換行符結束。

輸出格式:

輸出二行:

第一行:原字串 str

第二行:最長重複子串s,以換行符結束。

輸入樣例:

abcabcaeabcae

輸出樣例:

abcabcaeabcae

abcae

注意:無論是找到與否,輸出的第一行都需要輸出一遍原字串(具體看題要求)

核心:利用字首陣列的特性,即最大的 next[i] 對應最大的串長。 需要注意的是,下面的**中針對部分情況的結果是通過取巧的方式得到的。

#include

using namespace std;

char ch[

1000000

],s[

1000000];

void

get_next

(char

* t ,

int* next)

}int

main()

} cout

for(

int i=maxi-max+1;

(i<=maxi||next[i]==0

); i++

)printf

("%c"

,ch[i]);

else

cout<<

"null"

;return0;

}

求最長重複子串

主要思路還是求出所有的字尾陣列,對字尾陣列進行排序,這樣所有最接近的字串一定就在相鄰了,只需要比較每個字尾陣列的前後兩個串,就可以求出所有重複的字串,然後比較就可以得到最大的重複串的長度。include include include include include using namespace ...

求最長重複子串 和 最長不重複子串 思路

題目 求任意乙個字串中的所有最長重複字串和所有最長不重複子串 最長不重複子串的解法 設定乙個輔助資料結構 如map 記錄每個字元最後一次出現的位置 遍歷字串中的每個字元,如果在map中沒有出現,則不重複子串的長度 1,並更新最大字串的長度值 如果在map中已經出現過,則更新當前字元在map中的位置和...

leetcode 求最長無重複子串

1.求最長無重複子串 給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而...