給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
子串:串中任意個連續的字元組成的子串行稱為該串的子串。
要求字串的不含有重複字元的最長子串的長度,只需要先找到最長子串然後再求其長度即可,找最長子串我們可以通過滑動視窗的方法去查詢。
滑動視窗就是通過不斷調整子串行的 start 和 end 位置,從而獲取滿足要求的結果。
具體操作如下:
如何判斷右邊界 right 向右拓展時,其對應的字元和當前找到的子串中無重複字元呢?乙個簡單的方法是:設定乙個陣列記錄 ascii 碼出現的頻率,這樣當 right 向右拓展時,就可以查詢其對應的字元對應的 ascii 碼在該陣列中相應的頻率值的多少判斷是否出現了重複字元。
// c 語言
int lengthoflongestsubstring(char * s);
/* 定義滑動視窗為 s[l...r] */
int l = 0, r = -1;
while (l < len) else
/* 當前子串的長度和已找到的最長子串的長度取最大值 */
res = fmax(res, r - l + 1);
}return res;
}
// c++ 語言
int lengthoflongestsubstring(string s) ;
int l = 0, r = -1;
while (l < len) else
res = max(res, r - l + 1);
}return res;
}
滑動視窗 字串的無重複最長子串
給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。思路 滑動視窗 例子 abcbbcbb start和end初始為0.初始化set,裡面存放滿足滑動視窗的字元。條件是 在start到end這個視窗中不能有重複的字元。結果用r表示,初始化為0 end 0,a不在set中,將a加入到set,擴大...
無重複字元的最長子串(滑動視窗)
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。我們可以定義字元到索引的對映,而不是使用集合來判斷乙個字元是否存在。當我們找到重複的字元時,我們可以立即跳過該視窗。也就是說,如果 s...
無重複字元的最長子串(滑動視窗)
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。使用list的情況下可以儲存最長的字串什麼樣子,但是這道題不需要返回最長字串,所以list不好 class solution else retu...