美文网首页Python学习之旅
Python - 无重复字符的最长子串

Python - 无重复字符的最长子串

作者: 拔萝卜占坑 | 来源:发表于2018-12-29 10:43 被阅读0次

    描述:

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    注:此算法只超过了Leetcode上接近60%的人,通过分片的方式应该会更加高效

    def lengthOfLongestSubstring(s):
        """
        :type s: str
        :rtype: int
        """
        if(s is None):
            raise ValueError
    
        le = len(s)
        if(s == '' or le == 1):
            return le
    
        bufferStr = ''
        maxlen = 0
        maxStr = ''
        num = 0
        for character in s:
            num = num + 1
            if(character in bufferStr):
                bufferStrLen = len(bufferStr)
                index = bufferStr.find(character, 0, bufferStrLen)
                if(index == -1):
                    raise RuntimeError
                if(bufferStrLen > maxlen):
                    maxlen = bufferStrLen
                    maxStr = bufferStr
                bufferStr = bufferStr[index+1: bufferStrLen]
                if(maxlen >= (len(bufferStr) + (le - num))):
                    print(maxStr)
                    return maxlen
            bufferStr = bufferStr + character
            num = num + 1
        bl = len(bufferStr)
        if(bl > maxlen):
            maxStr = bufferStr
            maxlen = bl    
        print(maxStr)
        return maxlen
    

    相关文章

      网友评论

        本文标题:Python - 无重复字符的最长子串

        本文链接:https://www.haomeiwen.com/subject/worulqtx.html