【LeetCode-3】3.无重复字符的最长子串
程序员文章站
2022-07-13 21:18:11
...
无重复字符的最长子串
题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
滑动窗口+双指针+哈希
修改滑动窗口模板:
class Solution {
public int lengthOfLongestSubstring(String s) {
int maxLen = 0;
if(s == null || s.length() == 0) {
return maxLen;
}
// 动态更新的匹配窗口字典
Map<Character, Integer> window = new HashMap<>();
int left = 0, right = 0;
while(right < s.length()) {
char c = s.charAt(right);
right++;
// 进行窗口内数据的一系列更新
window.put(c, window.getOrDefault(c, 0) + 1);
//判断左侧窗口是否需要收缩
//题目要求子串不含重复字符
while(window.get(c) > 1) {
char d = s.charAt(left);
left++;
// 进行窗口内数据的一系列更新
window.put(d, window.get(d) - 1);
}
//更新maxLen
maxLen = Math.max(maxLen, right - left);
}
return maxLen;
}
}