leetcode 3. 无重复字符的最长子串 python

题目描述:

leetcode 3. 无重复字符的最长子串 python_第1张图片

题解:

 滑动窗口解法。

1.初始化left=0 longest=0。

2.right从1开始,当前窗口[left,right]对应的字符串段now为s[left:right],判断s[right]是否在now中存在,首先更新longest值,然后找到在now中对应的位置,left移动到该位置的下一个位置。

3.如果s[right]在now不存在,在其他情况不需要特殊处理,但如果此时right已经到s结尾的位置,需要更新longest值。(在longest和len(now)取最大值,加一是由于right只可以取到len(s)-1,并且now[left:right]无法取到right的位置)

class Solution(object):
    def lengthOfLongestSubstring(self,s):
        if len(s)<=1:
            return len(s)
        left = 0
        longest = 0
        for right in range(1,len(s)):
            now = s[left:right]
            if s[right] in now:
                longest = max(longest,len(now))
                left = left+now.index(s[right])+1
            else:
                if right == len(s)-1:
                    longest = max(longest,len(now)+1)
        return longest

leetcode 3. 无重复字符的最长子串 python_第2张图片

 

 

你可能感兴趣的:(leetcode滑动窗口,python,leetcode,算法)