给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
标签:滑动窗口 map
/**思路:
* 滑动窗口,以右侧的指针循环。
*遇到不同的字符就put到map中
*遇到相同的字符更新左侧指针
*注意:
* 假设有a1b1b2a2,为了防止因为a2和a1相同覆盖掉了b1b2相同导致left向左侧移动了,采取left = Math.max(left,map.get(s.charAt(i)) + 1);
*/
public static int lengthOfLongestSubstring(String s) {
int left = 0,max = 0;
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
if(map.containsKey(s.charAt(i))){
left = Math.max(left,map.get(s.charAt(i)) + 1);
}
map.put(s.charAt(i),i);
max = Math.max(max,i - left + 1);
}
return max;
}