3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
方法:
class Solution {
public int lengthOfLongestSubstring(String s) {
// 定义双指针i和j,j表示起始位置,i表示当前位置,ans为答案
int i = 0,j = 0,ans = 0;
// 定义set来存储已经出现过的字符
Set<Character> set = new HashSet<>();
// 如果i小于s的长度
while(i < s.length()){
// 如果set中已经存在s[i],那么说明出现了重复字符需要缩小窗口
if(set.contains(s.charAt(i))){
// 将j对应的字符从set中移除,并将j右移
set.remove(s.charAt(j++));
}else{
//否则将s[i]加入set中
set.add(s.charAt(i++));
// 并更新答案ans
ans = Math.max(ans,set.size());
}
}
return ans;
}
}