- 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
思路:滑动窗口
滑动窗口思路,定义left和max。
一个map,存放字符和下标。如果找到了相同的,那么向右移动left=max(left, 已存在的位置+1) ,如果没找到,则存放新的值,max+1,更新max=(max, i-left+1)
类似的题目:
-
无重复字符的最长子串
-
串联所有单词的子串
-
最小覆盖子串
-
至多包含两个不同字符的最长子串
-
长度最小的子数组
-
滑动窗口最大值
-
字符串的排列
-
最小区间
-
最小窗口子序列
class Solution {
public int lengthOfLongestSubstring(String s) {
int left = 0;
int max = 0;
Map<Character, Integer> map = new HashMap<>();
if(s.length() == 0) {
return 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;
}
}