题目
分析
要想时间复杂度最低,应该是遍历完一次字符串后,就可以得到结果。所以需要额外的一个指针来标记起始指针的位置。首先应该明确的是,往HashMap中存的时候,value值是从0开始还是从1开始。
【啊,这里当时都把我给绕晕了啊。】
代码
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s==null||s.length()==0)
return 0;
Map<Character, Integer>map=new HashMap<>();
int maxLen=0;
for(int i=0,j=0;i<s.length();i++){
if(map.containsKey(s.charAt(i)))
j=Math.max(map.get(s.charAt(i)),j);
if(i-j+1>maxLen)
maxLen=i-j+1;
map.put(s.charAt(i),i+1);
}
return maxLen;
}
}