Given a string, find the length of the longest substring without repeating characters.
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 the length of 3. Note that the answer must be a substring, "pwke"
is a subsequenceand not a substring.
用HashMap加快查询速度。HashMap.containsKey复杂度O(1),HashMap.containsValue复杂度O(n)。
取max是因为上一次遍历中,得到了两个相同的元素,前一个元素位置在j。
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int max = 0;
for(int i = 0, j = 0; i < s.length(); i++) {
if(map.containsKey(s.charAt(i))) {
// 这里取max是因为map中的元素加入之后一直存在
// map.get能获得最后一次出现的位置
j = Math.max(j, map.get(s.charAt(i)) + 1);
}
map.put(s.charAt(i), i);
max = Math.max(max, i - j + 1);
}
return max;
}
}