对于给定的列表,统计出不含重复元素的子序列最大长度。
例如:
['a', 'b', 'b', 'a', 'b', 'c', 'd', 'e', 'a']
无重复元素的最大子序列:
['a', 'b', 'c', 'd', 'e']
在这里使用双指针进行统计:看代码
nums = ['a', 'b', 'b', 'a', 'b', 'c', 'd', 'e', 'a']
left = -1 # 初始化左指针的位置
lens = 0 # 初始化长度
Dict = dict() # 用字典储存每种字符出现的索引位置
for right, s in enumerate(nums): # 右指针的索引生成
if s in Dict: # 如果该字符已经出现过一次了,需要更新左指针
left = max(left, Dict[s]) # 比较左指针和先前出现的索引,如果令left = Dict[s]
# 则左右指针之间出现重复的元素
Dict[s] = right # 如果该字符 s 不在字典里,储存其索引位置
lens = max(lens, right - left)# 计算左右指针之间的间隔,也就是不重复子序列的长度
# 每一次均保留最大的长度
print(lens)
输出:5