栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode

LeetCode第三题,求无重复的最长子串,这题比较简单。不多说,直接上题。

这一题题目的提示里有提到空格,但我觉得空格也算字符,毕竟空格还有ASCII码呢,ASCII码值为32,这个考试可能会考到的。

不多说,上代码:

def solution(origina_str):
    # 一个字符串类型的变量存放最长子串。
    max_sub_str = ""
    # 循环获取所有字串
    for i in range(len(origina_str)):
        for j in range(i + 1, len(origina_str) + 1):

            set_1 = set()
            # 字符串切片后的子串。
            sub_str = origina_str[i:j]

            # 将子串的每个字符存入集合,利用集合的无重复性,重复的字符不会再存。
            for k in sub_str:
                set_1.add(k)
            # 如果集合长度不等于字串长度,则表示有重复字符,直接舍弃。
            # 而且因为已经有重复字符,后面的子串也一定会有。
            if len(set_1) != len(sub_str):
                break
            else:
                # 取最长子串
                if len(sub_str) > len(max_sub_str):
                    max_sub_str = sub_str

    return len(max_sub_str)

老样子,两层for循环,第一层控制子串的头,第二层控制子串的尾,j从i之后开始寻找,获取子串的时候需要用到字符串切片,这个可以自己上网查资料。创建一个集合set_1,因为集合是无重复的,找到的子串,将字符一个个往集合里放,就能检验出来是否有重复字符。

举个例子:假如子串是Hello,用字符串表示就是str = "Hello",如果把这些个字符统统放入集合中,那么集合里面可能是这样一种情况:set = {"e", "H", "l", "o"},因为集合是无序的嘛。这样,集合的长度就是4,字符串的长度就是5,一比较,集合小了。那就表示有重复的字符。

找出来一个无重复字符就可以跟当前最长的无重复字符比较,更长的话就替换,否则就不管他,执行下一轮。

这是我测试的样子:

# 初始字符串
str_1 = "a w2afo an1 1ofn1a"
# 初始空列表,存放筛选出来的无重复子串
print(solution(str_1))

结果是这样:

6

如果想知道求得的最长子串是哪一串的话,在函数的return前面加上print就行:

 w2afo
6

注意:空格也是字符,他的ASCII码是32!!!

最后,我写的时候没看答案,这串代码肯定是比答案垃圾,仅做启发编程思维使用,如果出现Bug还请指正。

如果这篇文章对你有帮助的话,就点个赞吧,谢谢啦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号