LeetCode 剑指 Offer II 016. 不含重复字符的最长子字符串
题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子字符串是 "abc",所以其长度为 3。
LeetCode 剑指 Offer II 016. 不含重复字符的最长子字符串
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
一、解题关键词
去重、移动下标、 最长
二、解题报告
1.思路分析
滑动窗口问题
2.时间复杂度
3.代码示例
class Solution {
public int lengthOfLongestSubstring(String s) {
//滑动窗口
int len = s.length();
int maxLen = 0;
int left = 0,right = 0;
Set<Character> set = new HashSet<>();
for(int i = 0;i < len;i++){
left = i;
if(left != 0){
set.remove(s.charAt(left - 1));
}
while(right < len && !set.contains(s.charAt(right))){
set.add(s.charAt(right));
right ++;
}
maxLen = Math.max(maxLen,right - left);
}
return maxLen;
}
}
2.知识点