给定一个字符串 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;
    }