题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
链接
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
代码
/**
*无重复字符的最长子串
* 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
* 输入: s = "abcabcbb"
* 输出: 3
* 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
*/
@Test
public void test3(){
int length = lengthOfLongestSubstring("");
System.out.println(length);
}
public int lengthOfLongestSubstring(String s) {
//滑动窗口求解
int length = 0;
//起始结束下标
int start = 0;
int end = 0;
Set<Character> set = new HashSet<>();
while (start<s.length() && end <s.length()){
//如果重复 窗口左侧右移
if(set.contains(s.charAt(end))){
set.remove(s.charAt(start++));
}
//不重复 窗口右侧右移
else {
set.add(s.charAt(end++));
//比较当前长度与临时存储长度取最大值
length = Math.max(length,end-start);
}
}
return length;
}
注意点
不做双for及枚举示例求解
HashSet及Math.max运用