给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
难度:中等
提示:
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成利用双指针原理(队列)
class Solution { public int lengthOfLongestSubstring(String s) { // 特殊情况直接返回 if (s.length() < 2) { return s.length(); } int max = 1; HashMap<Character, Integer> hashMap = new HashMap<>(); int l = 0, r = 0; char[] chars = s.toCharArray(); while (r < chars.length) { // 如果元素存在,那么比较更新位置,因为有可能右指针的元素之前插入过,但是被更新区间的时候舍弃了,所以需要确定是否被舍弃,也就是该元素是否在左指针之前 if (hashMap.containsKey(chars[r])) { l = Math.max(l,hashMap.get(chars[r])+1); } // 更新元素 hashMap.put(chars[r], r); // 更新最长子串 max = Math.max(max, r - l + 1); r++; } return max; } }