zoukankan      html  css  js  c++  java
  • Python编程题16--最长不重复子串

    题目

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

    例如:

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

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

    实现思路

    • 设置一个字典 temp_dict ,用于存储每个字符在字符串中的最新位置
    • 设置一个列表 str_list ,用于存储不同的子串
    • 设置两个变量 start、max_length,分别表示 计算子串长度时的起始索引下标 和 最大子串长度
    • 遍历字符串,如果当前字符已在字典中,那么直接更新 start 的值,比较 temp_dict[cur] + 1(该字符所在位置 + 1)、start ,取其中的最大值
    • 计算子串时,从 start 到 i 的子串长度为 i - start + 1 ,如果该长度大于 max_length ,那么就更新 max_length 为 i - start + 1 ,同时将这里的子串存储到列表 str_list 中
    • 遍历的时候,每次都要把当前字符及其最新位置存储到 temp_dict 中
    • 从列表 str_list 中,找出元素长度为 max_length 的所有子串
    • 最后返回最长不重复的所有子串及其长度

    代码实现

    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项目发布到PyPI
    hashlib的md5计算
    使用hexo和coding建立静态博客站点
    mysql 使用记录
    linux QA
    linux 使用记录
    转载-linux内核长什么样
    mysql 更改默认字符集
    Say goodbye
    SSH proxycommand 不在同一局域网的机器ssh直连
  • 原文地址:https://www.cnblogs.com/wintest/p/13908685.html
Copyright © 2011-2022 走看看