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

2021-06-01 08:48:25 字數 520 閱讀 3556

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

最長不重複子串的解法:

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

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

最長重複子串的解法:

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

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

實現**:待續…

最長不重複子串

出處 勇幸 thinking 題 從乙個字串中找到乙個連續子串,該子串中任何兩個字元不能相同,求子串的最大長度並輸出一條最長不重複子串。本節從最直接的方法逐步優化,漸進探索了四種實現方式,並最終找到時間複雜度為o n 輔助空間為常數的方案,內容如下 基本演算法 使用hash dp方案 dp hash...

最長不重複子串

演算法參考 找到乙個字串中的乙個連續子串,這個子串內不能有任何兩個字元是相同的,並且這個子串是符合要求的最長的。例如輸入 abcbef 輸出 cbef o n 的演算法,具體思路如下 以abcbef這個串為例,用乙個陣列pos記錄每個元素曾出現的下標,初始化為 1。從s 0 開始,依次考察每個字元,...

最長不重複子串

題目鏈結 給定乙個字串,找到最長的子串,要求該子串中沒有重複的字元。例如 字串abcabcbb的不含重複字元的 最長 子串為abc,長度為 3。而bbbbbb的不含重複字元的 最長 子串為b,長度為 1。輸入格式 輸入包含多行,每一行對應乙個長度不超過 100 的輸出,直到遇到結束符為止。每行依次輸...