3 無重複字元的最長子串

2021-09-26 18:44:38 字數 1586 閱讀 5863

題目:

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

示例 1:

輸入:"abcabcbb"輸出:3解釋:因為無重複字元的最長子串是"abc",所以其長度為 3。
示例 2:

輸入:"bbbbb"輸出:1解釋:因為無重複字元的最長子串是"b",所以其長度為 1。
示例 3:

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

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

解題思路:遍歷陣列,並將遍歷的元素加入map(利用map的keyset中不含重複元素的特性),若出現重複key則計算長度,然後回歸到首個重複元素的下標,如序列"psadcaa",在下標5的地方檢測到重複,則將遍歷序號從第乙個a(即下標2)之後開始。直到遍歷完整個陣列。

**:

public static int lengthoflongestsubstring(string s) 

int maxlength = 1;

char a = s.tochararray();

hashmapmap = new hashmap<>(s.length());

for(int i=0;imaxlength)

i = map.get(a[i]);

map.clear();}}

if(map.size()>maxlength)

return maxlength;

}

演算法改進:不採用hashmap的個數來確定子串長度,而是 使用滑動視窗的方式來確定子串長度,即定義一組起始序號和結束序號begin,end來標誌子串,避免了大量的map.clear()操作。

**:

public static int lengthoflongestsubstring(string s) 

int maxlength = 1;

int begin=0,end=1;

char a = s.tochararray();

hashmapmap = new hashmap<>(s.length());

for(int i=0;i=begin)

begin = map.get(a[i]) + 1;

}map.put(a[i],i);

end = i + 1;

}maxlength = math.max((end - begin), maxlength);

return maxlength;

}

3 無重複字元的最長子串

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

3 無重複字元的最長子串

給定乙個字串,找出不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 無重複字元的最長子串是 abc 其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 無重複字元的最長子串是 b 其長度為 1。示例 3 輸入 pwwkew 輸出 3 解釋 無重複字元的最長子串是...

3 無重複字元的最長子串

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