Python编程题16--最长不重复子串

2020-11-01  本文已影响0人  wintests

题目

给定一个字符串,请从这个字符串中找出所有最长的没有重复字符的子串,并返回最长不重复子串的长度。

例如:

字符串:mabcafrab ==> 最长不重复子串:bcafr,长度5

字符串:pwswekedw ==> 最长不重复子串:swek, kedw,长度4

实现思路

代码实现

def get_longest_string(s):
    temp_dict = {}
    str_list = []
    start, max_length = 0, 0
    for i in range(len(s)):
        cur = s[i]
        if cur in temp_dict:
            start = max(temp_dict[cur] + 1, start)
        if i - start + 1 >= max_length:
            max_length = i - start + 1
            str_list.append(s[start:i+1])
        temp_dict[cur] = i
    res_str = ", ".join([i for i in str_list if len(i) == max_length])
    return res_str, max_length

s1 = "mabcafrab"
res = get_longest_string(s1)
# 最长不重复子串为:bcafr ,其长度为:5
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s1, res[0], res[1]))

s2 = "pwswekedw"
res = get_longest_string(s2)
# 最长不重复子串为:swek, kedw ,其长度为:4
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s2, res[0], res[1]))

s3 = "abcabb"
res = get_longest_string(s3)
# 最长不重复子串为:abc, bca, cab ,其长度为:3
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s3, res[0], res[1]))

s4 = "pwwkew"
res = get_longest_string(s4)
# 最长不重复子串为:wke, kew ,其长度为:3
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s4, res[0], res[1]))

s5 = "p"
res = get_longest_string(s5)
# 最长不重复子串为:p ,其长度为:1
print("字符串 {:20} 中,最长不重复子串为:{:20},其长度为:{:2}".format(s5, res[0], res[1]))

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

上一篇下一篇

猜你喜欢

热点阅读