自己沒想出來, **來自別人的部落格, 但是找不到出處了…
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 的輸出,直到遇到結束符為止。每行依次輸...