波大大12138 发表于 2021-8-12 16:05:11

剑指offer字符串

本帖最后由 波大大12138 于 2021-8-12 16:06 编辑

题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
py代码如下:
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
      head = 0
      tail = 0
      if len(s) < 2:
             return len(s) # 边界条件
      res = 1
      
      while tail < len(s) - 1:
            tail += 1
            if s not in s:
                res = max(tail - head + 1, res)
            else:
                while s in s:
                  head += 1
                  res = max(tail - head + 1, res)
      return res

问题:这是别人代码,利用滑动窗口,双指针做,我的问题出在while s in s:这句代码我之前自己写的时候没要这句,因为我觉得if判断条件,要不就在其中,要不就不在就这两种啊,为啥删了就不对?
错误示例:"pwwkew" 正确返回3,我删了返回4?

lei1996 发表于 2021-8-12 17:33:01

对于pwwkew当
head = 0, tail = 2时,如果没有while s in s这句判断的话只会让head加一次1变成1
但是正确思路是要保证head到tail之间始终不存在重复字符所以要加上while s in s使得head变成2
你的想法只能保证每次重复的字符只出现在head处时的情况比如acbdacbd

波大大12138 发表于 2021-8-14 13:57:22

lei1996 发表于 2021-8-12 17:33
对于pwwkew当
head = 0, tail = 2时,如果没有while s in s这句判断的话只会让head加 ...

理解了,谢谢,是我思路问题
页: [1]
查看完整版本: 剑指offer字符串