3.无重复字符的最长字串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 :
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
方法一:暴力法
- 双层循环遍历每一个字符串判断是否重复
- 如果不重复且比目前最大长度大则更新最大长度
- 如果重复就退出当前内层循环
public static int lengthOfLongestSubstring(String s){
int maxLen=0;
for (int i = 0; i < s.length(); i++) {
HashSet<Character> set=new HashSet<>();
for (int j = i; j < s.length(); j++) {
char c=s.charAt(j);
if (set.contains(c)){
break;
}
set.add(c);
maxLen=Math.max(maxLen,j-i+1);
}
}
return maxLen;
}
方法二:滑动窗口
- 用 left和right记录当前窗口的左右边界
- 右边界向前移动 右边界所对应的元素是否在当前窗口内
-- 不在当前窗口内 则右边界向前
-- 在当前窗口 则左边界向前移动 直至窗口内没有右边界所对应的元素
-- 记录下当前窗口长度 和最大窗口长度作比较
//滑动窗口
public static int lengthOfLongestSubstring(String s){
int maxLen=0;
char[] chars=s.toCharArray();
HashSet set=new HashSet<>();
for (int left = 0,right=0; right < chars.length; right++) {
while(set.contains(chars[right])){
set.remove(chars[left]);
left++;
}
set.add(chars[right]);
maxLen= Math.max(maxLen,right-left+1);
}
return maxLen;
}

浙公网安备 33010602011771号