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

2021-09-28 12:34:54 字數 846 閱讀 7359

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

用f(i)表示以第i個字元結尾不包含重複字元的子字串的最長長度,從左向右掃瞄

1、若第i個字元在之前沒出現過,則 f(i) = f(i-1) + 1;

2、若第i個字元在之前出現過,計算第i個字元距離上次出現之間的距離為d

以arabcacfr為例:

f(0) =1,  a

f(1) = 2,  ar

f(2) = 2,  ra,因為d=2,f(1)=2,所以上乙個a在f(1)(以下標為1結尾的最長不重複子串中)之中

f(3) = 3,  rab

f(4) = 4,  rabc

f(5) = 3,  bca,因為d=3,f(1)=4,所以上乙個a一定在f(4)中

f(6) = 2,  ac

f(7) = 3,  acf

f(8) = 4,  acfr,因為d=7,f(7)=3,因此上乙個r不在f(7)中,f(8) = f(7) + 1

int longestsubstringwithoutduplication(const std::string& str)

for(int i=0;inowlength) nowlength++;//如果d>f(i-1)或者當前字元在之前從未出現

else//d<=f(i-1),表示重複字元出現在以上乙個字元結尾的最長子串中

status[str[i]-'a']=i;//記錄字元出現的情況

} if(maxlengthreturn maxlength;

}

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

找出乙個字串行中乙個最長的包含不重複字元的子字串,比如在字串 arabcacfr 中,最長的不含重複字元的子字串是 acfr 長度為4。使用暴力法可以在o n 2 的時間複雜度內找到字串行的所有字串,然後在o n 的時間複雜度內比較這個字串是否包含重複字元,因為暴力解的時間複雜度為o n 3 如果面...

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

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

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

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