s[j,i]表示以字母i结尾的最长的无字母重复的substring;
public class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> charPosition = new HashMap<Character, Integer>();
int max = 0;
for (int i = 0, j = 0; i < s.length(); i ++){
if (charPosition.containsKey(s.charAt(i))){
j = Math.max(j, charPosition.get(s.charAt(i)) + 1);
}
charPosition.put(s.charAt(i), i);
max = Math.max(max, i-j+1);
}
return max;
}
}
注意:
j的更新不能直接:j = charPosition.get(s.charAt(i)) + 1;
例如测试用例“abba”,当i=3时,j将被从2更新为1.