题目
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
输入: "abcabcbb"
输出: 3
解释: 无重复字符的最长子串是 "abc",其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 无重复字符的最长子串是 "b",其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 无重复字符的最长子串是 "wke",其长度为 3。
请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。
解法:
循环字符串,每次循环通过计算到最近的无重复的字符串距离得到当前值往回所能达到的最大长度。每次循环查看当前值的最大长度是否是目前的最大长度。
示例
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
# {当前值:索引}
d = {}
# 当前无重复字符串长度
length = 0
# 最大无重复字符串长度
max_length = 0
# 最近的无重复的字符串索引
star = 0
for i in range(len(s)):
# 判断当前值是否重复,且重复位置是否在最近无重复字符串左边
if s[i] in d and d[s[i]] >= star:
star = d[s[i]] + 1
# 当前长度
length = i - star + 1
d[s[i]] = i
max_length = max(max_length, length)
return max_length