字串最長子串難?滑動視窗拯救你

2021-10-19 14:28:28 字數 1180 閱讀 7227

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 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...