1.题目描述
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串的长度。
2.题目分析
前面我们使用了哈希表的方法求两数之和,我们了解了哈希表的特点,所以此题我们可以很快联想到用哈希表来存放字符串,哈希表的索引也可以帮我们计算字符串的长度。
然后这里可以使用指针来实现一个滑动窗口,从而实现目的
3.代码实现
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
##使用哈希表dic,左指针i,右指针j,i到j之间的距离就是不重复的字符数
dic = {}
res = 0
i = -1
#指针j先行出发
for j in range(len(s)):
#如果当前字符s[j]在哈希表dic中
if s[j] in dic:
#更新左指针i为字符s[j]的上一次出现位置和当前左指针i的较大值
#这是为了保证i到j之间的子串不包含重复的字符
i = max(dic[s[j]], i)
#将字符s[j]及其位置j添加到哈希表dic中
dic[s[j]] = j
#更新最长不重复子串的长度为当前长度j-i和之前记录的最大长度res的较大值
res = max(res, j-i)
return res