|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: "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[j] in st:
i = max(st[s[j]], i)
ans = max(ans, j - i + 1)
st[s[j]] = j + 1
return ans
a = Solution()
s = 'abcabcbb'
print(a.lengthOfLongestSubstring(s))
没看明白i = max(st[s[j]], i)这一行,第一次进入循环j=0,那么s[0]=a,那max(st[a],i)是什么鬼
st在上面已经定义为字典了,然后在for 的时候 a 被定义为key
然后 st[s[j]] 的意思是 st[s[]0] 分解开来就是 st[a] ,又因为j = 0
所以return 上面那句st[s[j]] = j + 1 就是 st[a] = 0 + 1
弄成字典的话就变成了 st = {"a":1}
然后取值 st["a"] = 1 或者是st[s[3]] = 1 (里面的3就是for循环里面的j,可以变化的)
|
|