网站建设客户案例,深圳企业微电影拍摄,国外做储物柜的网站,网站制作 中企动力公司力扣热门100题 - 3.无重复字符的最长子串 题目链接#xff1a;3. 无重复字符的最长子串
题目描述#xff1a;
给定一个字符串 s #xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例#xff1a;
输入: s abcabcbb
输出: 3
解释: 因为无重复字… 力扣热门100题 - 3.无重复字符的最长子串 题目链接3. 无重复字符的最长子串
题目描述
给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度。示例
输入: s abcabcbb
输出: 3
解释: 因为无重复字符的最长子串是 abc所以其长度为 3。输入: s bbbbb
输出: 1
解释: 因为无重复字符的最长子串是 b所以其长度为 1。输入: s pwwkew
输出: 3
解释: 因为无重复字符的最长子串是 wke所以其长度为 3。请注意你的答案必须是 子串 的长度pwke 是一个子序列不是子串。提示
0 s.length 5 * 104
s 由英文字母、数字、符号和空格组成解题思路 滑动窗口 哈希表
使用两个指针 l 和 r 表示当前不含重复字符子串的左右边界初始时都指向字符串的开头。
使用 HashSet 存储当前子串中的字符以便快速检查字符是否重复出现。
不断移动右指针 r并将对应字符加入 HashSet。如果发现重复字符说明当前子串中有重复字符需要移动左指针 l并将对应字符从 HashSet 中移除直到子串中再次不含重复字符为止。
在每一次长度增加时更新最大子串长度 maxLen即 maxLen maxLen (r-l) ? maxLen : (r - l);。
时间复杂度O(n) 在每一步操作中l 和 r 指针都会向前移动而 HashSet 的操作是常数时间的因此整体复杂度为 O(n)。代码
class Solution {public int lengthOfLongestSubstring(String s) {HashSetCharacter hs new HashSet();int len s.length();int maxLen 0;int l 0;int r 0;while(r len){char c s.charAt(r);if (hs.contains(c)){hs.remove(s.charAt(l));l;}else {hs.add(c);r;maxLen maxLen (r-l) ? maxLen : (r - l);}}return maxLen;}
}