3. Longest Substring Without Repeating Characters
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 subsequence and not a substring.
//HashMap存的是字符和其对应的下标。i,j相当于设置两个指针,i从左往右扫,如果一个元素已经存在于map中,则把j移动到该上一个重复元素的右面,例如pwwkew,i等于2时检测到w已经存在,则把j设为2
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0)
return 0;
HashMap<Character, Integer> map = new HashMap<>();
int max = 0;
for (int i = 0,j = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (map.containsKey(ch))
j = Math.max(j, map.get(ch) + 1); // 此处必须是Math.max(j, map.get(s.charAt(i)) + 1),如果只是j=map.get(s.charAt(i)) + 1,传入abba后,会产生错误结果
map.put(ch, i);
max = Math.max(max, i - j + 1);
}
return max;
}
浙公网安备 33010602011771号