Leetcode刷題集 0003(滑動視窗)

2021-10-03 05:41:40 字數 823 閱讀 7916

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

示例 1:

輸入: "abcabcbb"

輸出: 3

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

示例 2:

輸入: "bbbbb"

輸出: 1

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

示例 3:

輸入: "pwwkew"

輸出: 3

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

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

演算法思想:雙指標演算法o(n

)o(n)

o(n)

定義倆個指標i和j;(i<=j)表示當前掃瞄到的子串是[i,j] (閉區間),掃瞄過程中維護乙個雜湊表unordered_maphash;表示的是[i,j]區間中每個字元出現的次數(滑動視窗的思想)

線性掃瞄時,每次迴圈的流程如下:

(1)指標j向後移一位,同時將雜湊表中s[i]的基數加1,即hash[s[i]]++;

(2)假設j移動前的區間[i,j]中沒有重複字元,則j移動後,只有s[j]可能出現2次.因此我們不斷向後移i,直至區間[i,j]中s[j]的個數等於1為止。

時間複雜度分析:

由於i,j均最多增加n次,且雜湊表的插入和更新操作的複雜的都是o(1),因此時間總複雜度為o(n).

c++**:

class solution 

return res;

}};

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...

LeetCode刷題總結

123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...