題目:
給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。
示例 1:
輸入:"abcabcbb"輸出:3解釋:因為無重複字元的最長子串是"abc",所以其
長度為 3。
示例 2:
輸入:"bbbbb"輸出:1解釋:因為無重複字元的最長子串是"b"
,所以其長度為 1。
示例 3:
輸入:"pwwkew"輸出:3解釋:因為無重複字元的最長子串是解題思路:遍歷陣列,並將遍歷的元素加入map(利用map的keyset中不含重複元素的特性),若出現重複key則計算長度,然後回歸到首個重複元素的下標,如序列"psadcaa",在下標5的地方檢測到重複,則將遍歷序號從第乙個a(即下標2)之後開始。直到遍歷完整個陣列。"wke"
,所以其長度為 3。請注意,你的答案必須是子串的長度,
"pwke"
是乙個子串行,不是子串。
**:
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解釋 因為...