public int lengthOfLongestSubstring(String s) {
Set<Character>hash=new HashSet<Character>();
int max=0;
int tmax=0;
int right=0;//右指针
for(int left=0;left<s.length();left++){//左指针每次循环向前移动一个字符
while(right<s.length()&&!hash.contains(s.charAt(right))){
hash.add(s.charAt(right));
right++;
}
tmax=right-left;
max=max>tmax?max:tmax;
hash.remove(s.charAt(left));//移除左指针指向字符
}
return max;
}
在写这道题时,我把滑动窗口法记错了,以为是右指针每次循环都要从左指针的前一位开始,通过看官方答案才发现问题,其实右指针是一直保持自增的,在这卡了我很长时间。
我认为还有一种方法:把右指针放到for循环,左指针在里层的while循环。以后再来补吧。