lc3 无重复字符的最长子串
滑动窗口 维护不重复的集合,指针向右平移
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character> set = new HashSet<>();
int n = s.length();
int rk = -1, ans = 0;
for (int i = 0; i< n; i++) {
if (i != 0) {
set.remove(s.charAt(i-1));
}
while(rk+1<n && !set.contains(s.charAt(rk+1))) {
set.add(s.charAt(rk+1));
rk++;
}
ans = Math.max(ans,rk-i+1);
}
return ans;
}
}
class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0) {
return 0;
}
HashMap<Character, Integer> map = new HashMap<>();
int max = 0;
int left = 0;
for (int i = 0; i < s.length(); i++) {
if (map.containsKey(s.charAt(i))) {
left = Math.max(left, map.get(s.charAt(i))+1);
}
map.put(s.charAt(i), i);
max = Math.max(max,i - left + 1);
}
return max;
}
}
两种解法,思路类似。
//todo 滑动窗口
3. 无重复字符的最长子串
-
串联所有单词的子串
-
最小覆盖子串
-
至多包含两个不同字符的最长子串
-
长度最小的子数组
-
滑动窗口最大值
-
字符串的排列
-
最小区间
-
最小窗口子序列