东莞网站设计讯息,wordpress移动端底部广告,佛山网站建设咨询,微信引流推广精准粉题目
给定一个字符串 s #xff0c;请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”#xff0c;所以其长度为 3。 示例 2:
输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串…题目
给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”所以其长度为 3。 示例 2:
输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”所以其长度为 1。 示例 3:
输入: s “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”所以其长度为 3。请注意你的答案必须是 子串 的长度“pwke” 是一个子序列不是子串。
答案
这个问题可以使用滑动窗口算法来解决。
首先我们定义一个变量 max_len 来记录最长子串的长度并初始化为 0。
然后我们定义一个集合 char_set 来记录当前窗口内出现的字符并初始化为空集。
接下来我们使用一个指针 left 来表示当前窗口的左边界初始化为 0。
然后我们使用一个指针 right 来表示当前窗口的右边界初始化为 0。
在每次循环中我们将 right 向右移动一位并将当前字符加入到 char_set 中。
如果当前字符已经在 char_set 中出现过说明当前窗口内存在重复字符我们需要将 left 向右移动一位并更新 char_set 和 max_len。
最后我们返回 max_len 即可。
以下是 Python 代码实现
def lengthOfLongestSubstring(s: str) - int:max_len 0 # 最长子串的长度char_set set() # 当前窗口内出现的字符集合left 0 # 当前窗口的左边界right 0 # 当前窗口的右边界while right len(s):if s[right] in char_set:char_set.remove(s[left])left 1char_set.add(s[right])max_len max(max_len, right - left 1)right 1return max_len