/** * 思想简单,用一个指针指向第二个重复的字符即可,然后判断每一段的大小,通过map保存没有重复字符的索引 */ public static int lengthOfLongestSubstring(String s) { int pre=0,maxlen=0; Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { if (map.containsKey(s.charAt(i))){ //如果是abba这种类型的话这样遍历到a的时候就不正确了,取出来的值为0+1不符合提议所以,取最大值 //pre = map.get(s.charAt(i))+1; pre = Math.max(map.get(s.charAt(i))+1,pre); } map.put(s.charAt(i),i); maxlen=Math.max(i-pre+1,maxlen); } return maxlen; }