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.知识点
本文介绍了如何使用滑动窗口算法来解决LeetCode剑指OfferII016题,即找到字符串中不含重复字符的最长子字符串的长度。通过设置两个指针left和right作为窗口边界,维护一个HashSet存储窗口内的字符,当遇到重复字符时缩小窗口,最终得到最长无重复字符子串的长度。这种方法的时间复杂度为O(n)。
705

被折叠的 条评论
为什么被折叠?



