Day9 最长不含重复字符的子字符串【双指针法】【待优化】

题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
【注意:子字符串 != 子序列,如"pwwkew"中,最长字串是"wke",“pwke” 是一个子序列,不是子串】
leetcode原题链接

思路:

  • 初始状态:左指针left=0,右指针right=0
  • 终止条件:①右指针right遍历完字符串s
  • 进入while循环
    while循环的条件是while(right!=len(s)-1),子字符串的右指针到 字符串最右,此时字符串已遍历完。
    • right+=1,如果string[left:right+1]有重复字符,则left+=1,直至无重复
  • 出while循环,return max_len=max(max_len,right-left+1)

代码:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s)==0:
            return 0
        if len(s)==1:
            return 1
        left,right=0,0
        max_len=0
        while(right!=len(s)-1):
            right+=1
            for i in s[left:right+1]:#判断子字符串中是否有 重复字符
                if s[left:right+1].count(i)>1:#若有
                    left+=1#left左移一位,直至无重复字符,才会运行下一行代码
            max_len=max(max_len,right-left+1)#遍历过的【无重复子字符串】中len最大的值 和 当前正在遍历的【无重复字符串】的len值比较,取max
        return max_len#字符串s遍历完成,返回max_len

两个if语句,是因leetcode的两个特殊测试用例而增设
在这里插入图片描述
在这里插入图片描述
待优化
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47128888/article/details/112991446