解题思路:本题的目的是在给定的字符串中,找出一个不含相同字母的子串。因此首先想到滑动窗口,即给定一个left和一个right,维护一个不包含相同字母子串的窗口。使用一个集合set作为辅助,每次将right向右移动一次,如果right对应的字符没有出现在set中,则无需操作;反之,则清除掉set中所有元素,重新计算滑窗,并将left移动到此时right的位置。right每次向右移动,都让结果res取 max(res, right-left+1)。
AC代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<>();
int res = 0;
for(int l=0, r=0; r<s.length(); r++)
{
char c = s.charAt(r);
while(set.contains(c))
{
set.remove(s.charAt(l));
l++;
}
set.add(c);
res = Math.max(res, r-l+1);
}
return res;
}
}