找出乙個字串行中乙個最長的包含不重複字元的子字串,比如在字串「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 ...