遍历字符串,每次以 i 值记录,不回溯 i 值,用flag记录遍历过程找到的重复的字符的位置。如果遇到重复字符,i-flag 即为子串长度,此时flag重新定位到子串中重复字符的位置,i 继续往后遍历。这里length跟result记录长度。我感觉代码可以更简洁一点的.
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character, Integer>map = new HashMap<>();
int max = 0,l=0;
char ch=' ';
for(int r=0;r<s.length();r++){
ch=s.charAt(r);
if(map.containsKey(ch)){
l = Math.max(map.get(ch)+1,l);
}
max=Math.max(max,r-l+1);
map.put(ch,r);
}
return max;
}
}