题目描述
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
- 示例1
输入:"abcabcbb"
输出: 3
解释:因为无重复字符的最长子串是 "abc",所以其长度为 3。
- 示例2
输入:"bbbbb"
输出:1
解释:因为无重复字符的最长子串是 "b",所以其长度为 1。
- 示例3
输入:"pwwkew"
输出:3
解释:因为无重复字符的最长子串是 "wke",所以其长度为 3。
使用列表的方法
对重复字符的回溯使用的是切片序列的index
方法。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if not s:
return 0
value, index = s[0], 0
current = 1
res = []
for si in range(1, len(s)):
su = s[si]
if su not in s[index:si]:
current += 1
else:
res.append(current)
index = s.index(su, index) + 1
current = si - index + 1
res.append(current)
return max(res)
借助字典的键值对
回溯的更新是在重复字符上的操作,所以可以建立字典后对重复字符的键进行一次更新值。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
values = dict()
res, cur = 0, 0
for si in range(len(s)):
su = s[si]
if su in values:
cur = max(cur, values[su])
res = max(res, si-cur+1)
values[su] = si + 1
# print(su, values, cur, res)
return res
(最近更新:2019年09月26日)