leetcode-python-03无重复字符的最长子串

Posted Python_Heaven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-python-03无重复字符的最长子串相关的知识,希望对你有一定的参考价值。

题目描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

解法1:

暴力解法:
定义一个字典,循环了2次,外层循环从第一个开始,取出字符str1=s[i]
内层循环取出相邻的字符,不同的拼接,已有就跳出内层循环,
将当前的字符串保留在字典中。
字典值进行排序取出最大值。

def max_string(s):
    if len(s) == 0:
        return 0
    dic = 
    for i in range(len(s)):  # a ,b
        str1 = s[i]
        for j in range(i + 1, len(s)):
            if s[j] not in str1:
                str1 = str1 + s[j]
            else:
                break
        dic[str1] = len(str1)

    result = max(dic.values())
    return result

解法二:

初始定义左边值,右边值,列表,最大长度:
left=0
right=1
list1 = []
max_lenght=0
然后开始遍历:
right往右走
[a]
[a,b]
[a,b,c]
当碰到第四个值是a时,记录下最大长度max_lenght=len(llist1),
清空list1.
然后将left+=1,right=left+1
right 往右走,放在列表中,当碰到元素在列表中,就停止

def max_string1(s):
    len_s = len(s)
    right = 0
    list1 = []
    max_lenght = 0
    for i in range(len_s):
        while (right < len_s) and (s[right] not in list1):
            list1.append(s[right])
            right = right + 1
        cur_len = len(list1)
        if cur_len > max_lenght:
            max_lenght = cur_len
        list1 = []
        right = i + 1
    return max_lenght

解法三:

这个是额外使用一个列表
初始化使:左边等于0,右边等于左边加一,列表先放入第一个值
在while循环中,如果右边的值不在列表中,就加在列表中,继续右边往后走,
每次计算更新最大长度值,否则左边+1,
右边等于左边加一,列表先放入第一个值循环。

def max_string2(s):
    len_s = len(s)
    if len_s == 0:
        return 0
    left = 0
    right = left + 1
    list1 = [s[left]]
    max_lenght = len(list1)
    while right < len_s:
        if s[right] not in list1:
            list1.append(s[right])
            right = right + 1
            cur_len = len(list1)
            if cur_len > max_lenght:
                max_lenght = cur_len
        else:
            left += 1
            list1 = [s[left]]
            right = left + 1
    return max_lenght

解法四:

使用列表,遍历字符串,当碰到的值在列表中,就while一直pop出第一个,可以去掉重复值,
不在的加在列表之后,每次计算更新最大值。

def max_string4(s):
    str1 = []
    max_lenght = 0
    for i in s:
        while i in str1:
            str1.pop(0)
        str1.append(i)
        max_lenght = max(len(str1), max_lenght)
    return max_lenght

以上是关于leetcode-python-03无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

力扣 3. 无重复字符的最长子串

力扣 3无重复字符的最长子串

力扣 3无重复字符的最长子串

最长无重复字串

将 Java 字符串从全部大写(由下划线分隔的单词)转换为 CamelCase(无单词分隔符)的最简单方法是啥?

创建初始重复数据的二维字符串数组的最有效方法是啥?