首页 编程教程正文

[笔记]求最长子串

piaodoo 编程教程 2020-02-22 22:01:06 834 0 python教程

本文来源吾爱破解论坛

本帖最后由 wushaominkk 于 2018-11-28 10:44 编辑

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
输入 "dvdf"
输出: 3我又来了,今天没有时间,发一个之前做的思路是这样的,遍历每个字符,如果遇到相同的,则计算长度,超过已有的,则记录然后从上一次重复的字符开始,组合新的子串,直到结束或者遇到新的重复字符这样,时间复杂度接近线性(即O(n))代码已经通过了测试[Python] 纯文本查看 复制代码

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        length = len(s)
        data = dict()
        cur = ''
        max = 0
        for i in range(length):
            c = s[i]
            index = cur.find(c)
            if index == -1:
                cur += c
            else:
                l = len(cur)
                if cur not in data:
                    data[cur] = l
                    if l > max:
                        max = l
                if index == l - 1:
                    cur = c
                else:
                    cur = cur[index + 1:] + c
        l = len(cur)
        if cur not in data:
            if l > max:
                max = l
        return max

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7301.html

搜索