最长非重复子串(python实现)

'''
取一个起始位置和一个结束位置,结束位置用于往活动字符串(列表)中放字符。
如果活动列表长度大于最长列表的长度,替换。
如果活动列表中存在该字符并且原字符串中的起始位置和结束位置对应的值相同,结束位置赋值给起始位置。
否则起始位置等于原字符串中该字符对应索引的下一个位置。
'''

b = 'abaaacddff'
# k = input()
# print(b.index(k))
max_string = []
ac_string = []
lis = list(b)
start = 0
end = 0
while end != len(b):
    if b[end] not in ac_string:
        ac_string.append(b[end])
        end +=1
    else:
        if lis[start] == lis[end]: #筛选出全是重复的例子:aaaaa这种
            start = end
        else:
            start = start + ac_string.index(b[end]) +1 #aaabb这种,当第二个b不能与a(最后一个a),则应该把start从第二个b开始
            end = start
        ac_string = []
    if len(max_string) < len(ac_string):
        max_string = ac_string

max_string = ''.join(max_string)
print(max_string)

相关推荐