先看示例:
输入:“asdsfda”
结果:4
分析:“sfda”
输入:“pwwkew”
结果:3
分析:最长子串是"wke",不是"pwke","pwke"是一个子序列
代码:
def no_repeat_str(s):
'''找出来一个字符串中最长不重复子串'''
res_list = []
length = len(s)
for i in range(length):
tmp = s[i]
for j in range(i + 1, length): # 遍历,不存在则拼接,已存在则打断循环
if s[j] not in tmp:
tmp += s[j]
else:
break
res_list.append(tmp) # 构造子串列表
# 以下代码目的是取子串列表中长度最大的元素,方法很多,以下是两种思路:
# 方法一(冒泡排序):
for i in range(len(res_list) - 1):
for j in range(len(res_list) - i - 1):
if len(res_list[j]) > len(res_list[j + 1]):
res_list[j], res_list[j + 1] = res_list[j + 1], res_list[j]
"""
# 方法二(选择排序):
for i in range(len(res_list)):
k = i
j = i + 1
while j < len(res_list):
if len(res_list[k]) > len(res_list[j]):
k = j
j += 1
if i != k:
res_list[i], res_list[k] = res_list[k], res_list[i]
"""
return res_list[-1]
if __name__ == '__main__':
str_list = ['5432467843', 'fdsaefkjkgdok', 'jhrd123xfdsa8042d5439']
for s in str_list:
res = no_repeat_str(s)
print('%s最长非重复子串为:%s,长度为: %s' % (s, res, len(res)))
结果:
5432467843最长非重复子串为:324678,长度为: 6
fdsaefkjkgdok最长非重复子串为:dsaefkj,长度为: 7
jhrd123xfdsa8042d5439最长非重复子串为:123xfdsa804,长度为: 11
欢迎评论交流