请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int lengthOfLongestSubstring(String s) {
//step1:上来就先new一个map
HashMap<Character, Integer> window = new HashMap<>();
//step2:设置left和right双指针
int left = 0, right = 0;
//step3:初始化结果集
int res = 0;
//step4:window🐛开始蠕动
while(right < s.length()){ //while(右伸条件)
//step4.1:🐛右伸
char c = s.charAt(right);
right++;
window.put(c, window.getOrDefault(c, 0)+1);
//step4.2:🐛左缩
while(window.get(c) > 1){ //while(左缩条件)
char d = s.charAt(left);
left++;
window.put(d, window.getOrDefault(d, 0)-1);
}
//step5:在蠕动过程中更新结果集
res = Math.max(res, right-left);
}
//step6:返回结果集
return res;
}
}