最長不重複子串 雜湊 DP

2021-09-19 03:59:33 字數 892 閱讀 5774

自己沒想出來, **來自別人的部落格, 但是找不到出處了…

int longestsubstring(string str)

int previous = -1; //記錄上乙個不重複子串的終點

int current = 0; //記錄當前不重複子串長度

int maxlength = 0; //記錄最大不重複子串長度

int n = str.size();

for (int i = 0; i < n; i++)

return maxlength;

}

假設有字串aabdcdde, 那麼我們一次遍歷,previous記錄上乙個不重複子串的終點為 -1, 得到首字元組成的子串長度為 1, 然後更新lastposition['a']的值為 0

然後遍歷到 i = 1 時, a 此時重複出現在當前子串中,previous更新為其上一出現位置的下標 (即 0), 計算的當前不重複子串長度為 1,previous值變為 0,lastposition['a']的值更新為 1,

這樣一直遍歷直到碰到第二個d, 即遇到重複字元了, 遇到他之前我們已經記錄了之前不重複子串的長度, 即abdc, 遇到他之後previous更新為其上一次出現的位置, 然後計算從previous到其當前位置的子串長度, 和maxlength比較

迴圈上述過程直到遍歷完字串,maxlength中就是最長不重複子串長度

最長不重複子串

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

最長不重複子串

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

最長不重複子串

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