题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
解题思路
滑动窗口思想
-
设置一个队列,从数组头部开始扩大,如果出现重复字符,我们就删除最左端 元素,计算此时长度,
-
继续扩大队列,当再次遇到重复字符时,计算长度
-
判断该字符是否为队头元素,如果不是,则将队列中该字符的左端元素包括自身删除
-
遍历整个数组
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
int left=0;
int max=0;
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
left = Math.max(map.get(s.charAt(i))+1,left);
}
map.put(s.charAt(i),i);
max=Math.max(i-left+1,max);
}
return max;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/