鱼C论坛

 找回密码
 立即注册
查看: 3308|回复: 2

[已解决]剑指offer字符串

[复制链接]
发表于 2021-8-12 16:05:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 波大大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[tail] not in s[head: tail]:
                res = max(tail - head + 1, res)
            else:
                while s[tail] in s[head: tail]:
                    head += 1
                    res = max(tail - head + 1, res)
        return res

问题:这是别人代码,利用滑动窗口,双指针做,我的问题出在while s[tail] in s[head: tail]:这句代码我之前自己写的时候没要这句,因为我觉得if判断条件,要不就在其中,要不就不在就这两种啊,为啥删了就不对?
错误示例:"pwwkew" 正确返回3,我删了返回4?
最佳答案
2021-8-12 17:33:01
对于pwwkew当
head = 0, tail = 2时,如果没有while s[tail] in s[head: tail]这句判断的话  只会让head加一次1变成1
但是正确思路是要保证head到tail之间始终不存在重复字符  所以要加上while s[tail] in s[head: tail]  使得head变成2
你的想法只能保证每次重复的字符  只出现在head处时的情况  比如acbdacbd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-12 17:33:01 | 显示全部楼层    本楼为最佳答案   
对于pwwkew当
head = 0, tail = 2时,如果没有while s[tail] in s[head: tail]这句判断的话  只会让head加一次1变成1
但是正确思路是要保证head到tail之间始终不存在重复字符  所以要加上while s[tail] in s[head: tail]  使得head变成2
你的想法只能保证每次重复的字符  只出现在head处时的情况  比如acbdacbd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-14 13:57:22 | 显示全部楼层
lei1996 发表于 2021-8-12 17:33
对于pwwkew当
head = 0, tail = 2时,如果没有while s[tail] in s[head: tail]这句判断的话  只会让head加 ...

理解了,谢谢,是我思路问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 23:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表