LeetCode刷題筆記 三)無重複字元的最長子串

2021-08-18 21:55:37 字數 1385 閱讀 3244

題目:

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

示例:

給定"abcabcbb",沒有重複字元的最長子串是"abc",那麼長度就是3。

給定"bbbbb",最長的子串就是"b",長度是1。

給定"pwwkew",最長子串是"wke",長度是3。請注意答案必須是乙個子串"pwke"是 子串行  而不是子串。

解題1:

class solution 

else

}return ans;

}}

滑動視窗思想:其實這個和上面的思路是一樣的,就是判斷[i,j]和[j+1]是否重複的問題

若重複:頭節點後移到尾節點前一位,滑動視窗大小重定義為1。

時間複雜度:o(n^2);

空間複雜度:o(n);

解法3:

public class solution 

ans = math.max(ans, j - i + 1); //判斷長度是否要改變

map.put(s.charat(j), j + 1); //把字元和索引放進map,重複的會進行覆蓋

}return ans;

}}

這是一直利用hashmap解題思路:其實也是判斷[i,j]和[j+1]的問題。

舉個例子:s="abcbadca"; i= 0;j=0

依次把存入map,此時ans = 3,i=0,j=3;

下一次進入的時候,因為『b'已存在map中,所以i會被設為2,即字元陣列中第乙個b的後乙個位置。同時map裡面的b對應的值會被更新為4,然後判斷ans的值,同時map裡面的b對應的值會被更新為4。

依次計算,就可以把最長不重複子串的長度得出。這裡只有乙個迴圈,map的查詢時間複雜度為o(1),比之前的兩種方法都快。

時間複雜度:o(n);

空間複雜度:o(n)       

解法4:

public class solution 

return ans;

}}

這個解法和上面的hashmap的解法其實是一樣的,只不過這種解法是把之前map的key作為陣列的索引,value作為陣列的值。因為字元char會被轉為int值(根據ascii碼表對應)。不過這種的優勢在於只要乙個128的陣列,而不是map的結構。

時間複雜度:o(n);

空間複雜度:o(1);

LeetCode 題三 無重複長度字串

3.無重複字元的最長字串 給出乙個不限長的字串,請你找出不含有重複字串的最長字串 例項 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1 輸入 pwwkew 輸出 3 解釋...

leetcode 三 無重複字元子串

題目 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。解法解析 solution hua jie suan fa 3 wu zhong fu zi fu de zui chang z 思路標籤 滑動視窗 暴力解法時間複雜度較高,會達到 o n 2 故而採取滑動視窗的方法降低時間複雜度 ...

Leetcode刷題筆記 435 無重疊區間

題目 給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。示例 1 輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 移除 1,3 後,剩下的區間沒有重疊。示例 2 輸入 1,2...