无重复字符的最长字串
力扣中等题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
输入: s = “”
输出: 0
解题方法:语言为python
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
length = len(s)
if length <= 0:
return 0
if length == 1:
return 1
flag1 = 0
flag2 = 0
head = 0
max_length = 0
myHashMap = {}
for index in range(length):
if s[index] in myHashMap and head <= myHashMap[s[index]]:
'''head代表有几位重复'''
head = myHashMap[s[index]] + 1
flag1 = flag1+1
print(head)
else:
max_length = max(max_length, index - head + 1)
flag2 = flag2+1
myHashMap[s[index]] = index
return max_length
字典的想法还是很巧妙的,捋清思路费了一些时间,个人认为这道题最关键的是对head的计算,这个元素在不在字典中也只是为了辅助第一次重复的时候head=0时的判断。
2021.04.20