无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
ps:leetcode中的第三题,代码是评论中的第一个给出的
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
st = {}
i, ans = 0, 0
for j in range(len(s)):
if s in st:
i = max(st], i)
ans = max(ans, j - i + 1)
st] = j + 1
return ans
a = Solution()
s = 'abcabcbb'
print(a.lengthOfLongestSubstring(s))
没看明白i = max(st], i)这一行,第一次进入循环j=0,那么s=a,那max(st,i)是什么鬼 就是max(a,b),取a,b当中最大值 第一次j=0 那么if 条件不成立,里面的缩进不会执行,直接跳到ans那一行
当j=3的时候 if 条件才会成立,那个时候st作为字典里面就有数据了
i = max(st], i)表示为: i = max(st, i)再次分解为: i = max(1,0)
应该是这样,看的有点乱,有可能会错,建议你debug jtxs0000 发表于 2020-11-23 12:32
第一次j=0 那么if 条件不成立,里面的缩进不会执行,直接跳到ans那一行
当j=3的时候 if 条件才会成立, ...
我就是不太明白st为啥是1 好吃的小笼包 发表于 2020-11-23 15:46
我就是不太明白st为啥是1
st在上面已经定义为字典了,然后在for 的时候 a 被定义为key
然后 st]的意思是 st0]分解开来就是st ,又因为j = 0
所以return 上面那句st] = j + 1 就是 st = 0 + 1
弄成字典的话就变成了st = {"a":1}
然后取值 st["a"] = 1 或者是st] = 1(里面的3就是for循环里面的j,可以变化的)
页:
[1]