1.题目描述
给定一个字符串 s
,请你找出其中不含有重复字符的最长字串的长度。
2 思路
可以用两个指针, 滑动窗口的思想来做这道题,即定义两个指针.一个left和一个right
并且用一个set容器,一个length , 一个maxlength来记录,
让right往右走,并且用一个set容器来存储right走过的字符(如果容器里没有这个字符)
right每走一步就让length++, 并且和maxlength比较,如果比maxlength还大,就赋值给maxlength.
如果有这个字符,就让left往右走,找到相同的字符,就length--,并且从容器里删掉这个字符
我们用 pwwkew来举例.
第一步: right走到没有重复的.
即 right的下标在第二个w停下,在次之前,每次都存储到set里面,并且length++ Σmaxlength比较.
第二步 left开始走,如果set里面包含的有,就一直走 并且删除吊left走过的元素,length--
第三步 返回maxlength
三 代码书写
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet();
int left = 0;
int right = 0;
int length = 0;
int maxLength = 0;
while (right<s.length()) {
if (!set.contains(s.charAt(right))) {
set.add(s.charAt(right));
length++;
right++;
if (length > maxLength) {
maxLength = length;
}
} else {
while (set.contains(s.charAt(right))){
set.remove(s.charAt(left));
left++;
length--;
}
}
}
return maxLength;
}