leetcode 最長無重複子字串

2021-10-10 16:29:28 字數 1052 閱讀 3266

**

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

示例 1:

輸入: 「abcabcbb」

輸出: 3

解釋: 因為無重複字元的最長子串是 「abc」,所以其長度為 3。

示例 2:

輸入: 「bbbbb」

輸出: 1

解釋: 因為無重複字元的最長子串是 「b」,所以其長度為 1。

示例 3:

輸入: 「pwwkew」

輸出: 3

解釋: 因為無重複字元的最長子串是 「wke」,所以其長度為 3。

請注意,你的答案必須是 子串 的長度,「pwke」 是乙個子串行,不是子串。

思路:1.核心思想是「滑動視窗尋找」,考慮利用兩個指標來找到這個「滑動視窗」的左右邊界,因此在尋找邊界時,要考慮是否重複問題則需要將已出現的字元儲存,所有用到容器:集合,和集合的增刪操作與是否唯一操作(ss.count())。

2.邏輯:還是使用了巢狀迴圈,但時間複雜度並非 o(n2); 初始指標指空(-1),從字串頭開始遍歷,當找到乙個無重複字元時便將其插入到集合中,並把右指標後移(長度增加),在外層一次遍歷中找到第一次的最大乙個無重複子串,儲存此時的長度,此時右指標停在重複字元上,即開始移動左指標。

3.左指標移動時,刪除在集合中存在的當前字元元素(因為在找到重複字元前的所有字元均為無效字元),直到找重複字元並刪除後,便可以回到 2 繼續下一輪的迴圈找到新的無重複子串,並在找到後予以儲存其長度值,因此儲存時應該是儲存的與當前比較的較大值做為返回。(max()).

時間複雜度:o(n)

空間複雜度:o(∑)

至此,解決。

int lengthoflongestsubstring

(string s)

while

(p+1

!ss.

count

(s[p+1]

))ret =

max(ret,p-i+1)

;}}return ret;

respect!!!

leetcode 求最長無重複子串

1.求最長無重複子串 給定乙個字串,找出不含有重複字元的最長子串的長度。示例 給定 abcabcbb 沒有重複字元的最長子串是 abc 那麼長度就是3。給定 bbbbb 最長的子串就是 b 長度是1。給定 pwwkew 最長子串是 wke 長度是3。請注意答案必須是乙個子串,pwke 是 子串行 而...

最長無重複子串

examples given abcabcbb the answer is abc which the length is 3.given bbbbb the answer is b with the length of 1.given pwwkew the answer is wke with t...

最長無重複子串

給定乙個字串,請找出其中無重複字元的最長子字串。例如,在 abcabcbb 中,最長無重複子串為 abc 其長度為3。在 pwwkew 最長無重複子串為 wke 其長度為3。注意是是子串,pwke 是子串行而不是子串。leetcode 首先試了試暴力搜尋,遍歷一次字串,遍歷過程中,對每個字元都有乙個...