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.
Solution:
基本想法:維護一個hashmap,其中字符為key,位置為value,同時維護兩個指針用于計算最長子串。右指針掃描,同時更新hashmap。如果某個字符已經在hashmap里面,將左指針移動到上一次發現該字符的右一位。注意兩個指針可以同時移動。
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0) return 0;
Map<Character, Integer> map = new HashMap<>();
int max = 0;
for (int i = 0, j = 0; i < s.length(); ++i){
if (map.containsKey(s.charAt(i))){
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;
}
}