思路
双指针
易错点
什么时候更新长度
除了每次有重复的要更新 ,如果abc这种,本身就不会重复,那maxLength就永远不会更新了。
思路不对
left不应该是+1,对于abca,是+1
对于 abcc,应该直接加3,所以需要记录位置
后来看题解,也可以不记录位置,就相当于左边界一直向右移动
思路还是不对
left跳转位置对了,但是left之前的在map里面的也应该清空啊
怎么解决
比如 abccfga, 最后的a其实是没有重复的,因为在处理cc重复的时候abc都已经舍弃了
最终代码
public int lengthOfLongestSubstring(String s) {
int left = 0;
int right = 0;
int maxLength = 0;
Map<Character, Integer> record = new HashMap(27);
while(right < s.length()){
// 这个判断,一个判断这个是不是重复值,但是因为有些重复值其实没有更新,通过他们与左边界的位置来判断
if (record.containsKey(s.charAt(right)) && record.get(s.charAt(right)) >= left ){
maxLength = Math.max(maxLength, right - left);
left = record.get(s.charAt(right)) + 1;
}
record.put(s.charAt(right), right);
right++;
}
maxLength = Math.max(maxLength, right - left);
return maxLength;
}
```