今天分享的题目是LeetCode3. 无重复字符的最长子串,来看题目描述:
无重复的最长子串,题目有可能有些小伙伴没读太懂,其实就是找到不重复的最长子串,比如eg3,pwwk,那么w出现了两次就不符合要求。
解题思路:滑动窗口+Set集合。
定义左右指针,让右指针进行滑动,滑动之前先对set集合进行判断,看是否出现过,如果没有出现再往set集合里放。如果出现过了那么需要先进行删除原来出现过的也就是左指针的位置,再往set集合中放。
实现的代码如下:
public int lengthOfLongestSubstring(String s) {
Set<Object> strings = new HashSet<>();
int left = 0;
int len = 0;
int maxlen = 0;
int right =0;
while (right<s.length()){
if (!strings.contains(s.charAt(right))){
strings.add(s.charAt(right));
len++;
if (len>maxlen){
maxlen=len;
}
right++;
}else {
while (strings.contains(s.charAt(right))){
strings.remove(s.charAt(left));
left++;
len--;
}
//直至不包含了
strings.add(s.charAt(right));
right++;
len++;
}
}
return maxlen;
}
需要注意的是对set集合已经包含了元素的处理,需要用一个while循环一直删除重复的元素,然后跳出循环后需要对右指针的元素添加。
如果说没有看太懂的话推荐下b站的博主:[https://www.bilibili.com/video/BV113411v7Ak/?spm_id_from=333.337.search-card.all.click&vd_source=676b214f47ae14dd73164e90955d4dc0
]
今天的算法就分享到这里了,如果觉得对你有帮助希望给个小小的3连。