|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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?
对于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
|
|