通过该题目学习了字典和元组的内容
题目如下:
代码如下:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
max_len=0 #max_len表示所有历史循环中的最大不重复长度
if s is None or len(s)==0: #如果s是空或者s长度为0则直接返回max_len
return max_len
str_dict={} #初始化一个字典,用来存放不重复的字母和字母【最新不重复】的下标数字
one_max=0 #每次循环的最大不重复长度
start=0 #不重复的开始位置
for i in range(len(s)):
if s[i] in str_dict and str_dict[s[i]]>=start:#判断当前字符是否在字典中和当前字符的下标是否大于等于最近重复字符的所在位置
start=str_dict[s[i]]+1 #更新不重复的开始位置,+1操作是因为刚开始是从0开始的,而不是1
one_max=i-start+1 #更新单次不重复的最大长度
str_dict[s[i]]=i #更新字典,将s[i]表示的字母的对应下标数字i存入字典
max_len=max(max_len,one_max) #比较此次循环的最大不重复子串长度和历史循环最大不重复子串长度
return max_len
1、字典的具体数据如下,以"bbbbb"、"eeydgwdykpv"、"pwwkew" 、"abcabcbb"为例
字典中的信息表示每个字母以及该字母最新出现的位置
2、注意代码中str_dict[s[i]]表示的是一个数字,例如在s='eeydgwdykpv'中,s[i]是一个元组,s[0]='e',s[1]='e',s[2]='y',
str_dict["e"]表示字典str_dict中key为"e"所对应的value=1,所以str_dict[s[i]]是一个数字