美文网首页剑指offer- python实现
面试题48:最长不含重复字符的子字符串

面试题48:最长不含重复字符的子字符串

作者: 不会编程的程序猿甲 | 来源:发表于2020-03-27 21:25 被阅读0次

题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

思路:
这道题目需要用到动态规划的思想,定义函数f(i)为不含重复字符串的最长长度,当没有出现重复时,f(i) = f(i-1)+1;当出现重复的字符串时,两种情况:重复字符之间的距离d大于当前的curLen时,说明这个重复对于当前字符串没有影响,可以直接在f(i-1)基础上加1;否则说明当前的字符串已经出现重复,那么相应的curLen应该等于重复的字符串之间的距离。具体代码思路如下:

48 最长不含重复字符的子字符串.png

代码实现:

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        #初始化变量
        curLen = 0
        maxLen = 0
        position ={}   #字典
        for i in range(len(s)):
            if s[i] not in position or curLen < i-position[s[i]]:  #如果没有重复或者距离大于                                                                     #curLen,直接加1即可
                curLen +=1
            else:
                curLen = i-position[s[i]]   #两个重复字符之间距离就是当前不重复字符串的长度
            position[s[i]] = i  #更新字符的位置
            if curLen > maxLen:
                maxLen = curLen
        return maxLen

提交结果:


相关文章

网友评论

    本文标题:面试题48:最长不含重复字符的子字符串

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