给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
private int lengthOfLongestSubstring(String s) { int n = s.length(), ans = 0; Map<Character, Integer> map = new HashMap<>(); for (int end = 0, start = 0; end < n; end++) { char alpha = s.charAt(end); if (map.containsKey(alpha)) {//如果当前字符与之前的某个字符重复,需要更新start起始索引 //从前一个字符串开始的位置后面取(就是说将原来字符串起始的位置从重复的字符位往后挪动了一位) start = Math.max(map.get(alpha), start); } ans = Math.max(ans, end - start + 1); //ans表示子串的长度,(当前子串的长度) map.put(s.charAt(end), end + 1); //键表示当前字符,值表示这个字符在字符串中的位置(从1开始) } return ans; }