这题一开始我理解错了。后来自己去解也没完成,看了参考,看了半天没懂为什么,虽然代码短,但是逻辑性很高~
解题思想:设置滑动窗口
import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class Sum22 { public static void main(String[] args) { Sum22 sum4 = new Sum22(); String s = "qwyrwkew"; sum4.lengthOfLongestSubstring(s); } public int lengthOfLongestSubstring(String s) { if (s.length() == 0) return 0; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); int max = 0; for (int i = 0, j = 0; i < s.length(); ++i) { if (map.containsKey(s.charAt(i))) { j = Math.max(j, map.get(s.charAt(i)) + 1); //如果不用取大操作,那么abba,在遍历到a时,j的值为0,此时应该为1才对 } map.put(s.charAt(i), i); max = Math.max(max, i - j + 1); } return max; } }