请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
提示:
s.length <= 40000
解题思路
- 使用set维护滑动窗口内的字母种类
- 固定右边界,收缩左边界直至窗口内没有重复字母
代码
class Solution {public int lengthOfLongestSubstring(String s) {Set<Character> set=new HashSet<>();int l=0,r=0,max=0;while (r<s.length()) {while (set.contains(s.charAt(r))){set.remove(s.charAt(l));l++;}set.add(s.charAt(r));r++;max=Math.max(r-l,max);}return max;}
}