"""
题目:输入一个字符串,求该字符串中不含重复字符的最长子字符串的长度。
例如,输入字符串’babcca',其最长的不含重复字符的子字符串是‘abc’,长度为3
解题思路:解该题的核心思想是,如何通过恰当的双指针移动来截取子字符串。至于子字符串中是否包含重复字符这都很好判断。
如何恰当的通过双指针截取子字符串呢?P1的起始位置为0,P2的起始位置为1.
首先判断P1-P2是否有重复字符,如果没有,则持续右移P2,并使用列表T1记录下每个无重复字符的子字符串的长度
直到发现P1-P2有重复字符,则P2不动,将P1右移,直到P1-P2没有重复字符,
如此循环,直到P2到达字符串末尾+1。然后去T1中的最大值就是最长无重复子字符串的长度.
注意这个结束循环的判断条件,是需要好好思考的。
"""
def no_repeat(t):
length = len(t)
t_list = list(t)
p1, p2 = 0, 1
# no_repeat_length负责记录无重复字符的子字符串的长度
no_repeat_length = []
while p2 != length+1:
sub_t = t_list[p1:p2]
if len(sub_t) == len(set(sub_t)):
no_repeat_length.append(p2-p1)
p2 += 1
else:
p1 += 1
return max(no_repeat_length)
t = 'babccabfg'
t2 = 'sdsasdssbfsddfhjkiuowewewe'
t3 = 'abcdefffffff'
print(no_repeat(t))
print(no_repeat(t2))
print(no_repeat(t3))