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.
1刷
Sliding Window,每次在HashMap里放入當前字符的index i。 要注意start何時更新。 比如abba這種情況。
Time Complexity - O(n),Space Complexity - O(n)
public class Solution {
public int lengthOfLongestSubstring(String s) {
int max = 0;
if(s == null || s.length() == 0) return max;
if(s.length()==1) return 1;
int start = 0;
//character to indices
Map<Character, Integer> map = new HashMap<>();
for(int i=0; i<s.length(); i++){
Character c = s.charAt(i);
if(map.containsKey(c)){
if(map.get(c)>=start){
start = map.get(c) + 1;
}
}
map.put(c, i);
max = Math.max(max, i-start+1);
}
return max;
}
}