1. 程式人生 > >求最長重複子串 和 最長不重複子串 思路

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

題目: 求任意一個字串中的所有最長重複字串和所有最長不重複子串

最長不重複子串的解法:

       設定一個輔助資料結構(如map)記錄每個字元最後一次出現的位置;遍歷字串中的每個字元,如果在map中沒有出現,則不重複子串的長度+1,並更新最大字串的長度值; 如果在map中已經出現過,則更新當前字元在map中的位置和當前不重複子串的長度,並根據更新的長度來更新最大字串的長度;這樣就可以求出該字串中的最大不重複子串的最大長度;

但是最長不重複子串可能有多個,如何將所有子串打印出來;可以設立一個二維陣列或者二維vector,來儲存所有不重複子字串的長度長度和首位置,然後遍歷這這個資料結構列印最長不重複子串;

最長重複子串的解法:

大方向有兩個:一個是字尾陣列/字尾樹, 另外一個就是KMP演算法;

KMP解法:遍歷字串字元i,分別計算以i位置字元為首字元的字串的next陣列,遍歷next陣列選取最大的元素,更新最大重複子串的長度;列印方法可以參考不重複子串的做法;

實現程式碼:待續…