最長不含重複字元的子字串(劍指offer 48)

2021-09-13 12:35:55 字數 866 閱讀 6669

找出乙個字串行中乙個最長的包含不重複字元的子字串,比如在字串「arabcacfr」中,最長的不含重複字元的子字串是「acfr」,長度為4。

使用暴力法可以在o(n^2)的時間複雜度內找到字串行的所有字串,然後在o(n)的時間複雜度內比較這個字串是否包含重複字元,因為暴力解的時間複雜度為o(n^3),如果面試用暴力解,基本上就涼涼了。

從頭到尾遍歷陣列元素時,使用乙個輔助字典來儲存已經找到的元素次數。同時使用乙個pos變數來儲存滑動視窗的起始位置,用乙個變數temp_len來儲存滑動視窗的大小,用變數start儲存最後所求的視窗的起始位置,用變數max_len來儲存視窗的最大長度。遍歷過程中,如果這個元素在map中沒有出現過,則這個元素在map中的次數設為1,同時計算滑動視窗temp_len的大小,如果滑動視窗temp_len比最大視窗max_len大,則把max_len=temp_len,同時start=pos。如果這個元素在map中已經出現過,那麼start指標往後移動到重複元素的下乙個元素,移動中劃過的元素在map中的次數設定為0,時間複雜度o(n^2)。詳細**如下:

#include#include#includeusing namespace std;

//找出最長不含重複字元的子字串

void maxnorepeatseq(vectorinput)

} else

pos++;

has_found_char[input[i]] = 1;

} } cout << "start:" << start << endl;

cout << "max_len:" << max_len << endl;

}

劍指offer最長不含重複字元的子字串

題目 請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度,假設字串中只包含 a z 的字元。例如,在字串 arabcacfr 中,最長的不含重複字元的子字串是 acfr 長度為4.陣列 最長不重複的字串長度 動態規劃 public static void gui string s...

劍指offer 最長不含重複字元的子字串

找出乙個字串行中乙個最長的包含不重複字元的子字串,比如在字串 arabcacfr 中,最長的不含重複字元的子字串是 acfr 長度為4。用f i 表示以第i個字元結尾不包含重複字元的子字串的最長長度,從左向右掃瞄 1 若第i個字元在之前沒出現過,則 f i f i 1 1 2 若第i個字元在之前出現...

劍指 Offer最長不含重複字元的子字串

請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew ...