标签:重复 length return sci 计算 def 不用 cab substr
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
class Solution:
def lengthOfLongestSubstring(self, s):
"""
遍历所有字符,通过更新每个字符出现的位置,并调整起点位置,计算得到当前子串的长度。
:type s: str
:rtype: int
"""
# 这里我们只考虑ascii码表中的前256个字符,如果输入是超过这个范围的则需要扩大list长度
# 或者使用字典
char_pos = [-1] * 256
# 将start标记为当前子串起点前1位。例如当前子串的下表是0-3,则start置为-1,这样在后面
# 计算长度的时候就不用+1,因为start标记的是前一位
start = -1
maxlen = 0
# 对每一个字符来说,如果上一次出现的下标比当前子串的起点要大,也就是说这个字符上一次出现
# 的地方是在start之后,而这一次又出现了,说明在[start+1, i]这一段出现了2个相同字符。
# 那么我们需要将start移动到当前字符上一次出现的位置才能确保当前字符的这一次出现是新子串
# 中的第一次出现。
# 对于每一个出现的字符,记录最新出现的下标。
for i, c in enumerate(s):
if char_pos[ord(c)] > start:
start = char_pos[ord(c)]
char_pos[ord(c)] = i
maxlen = max(maxlen, i - start)
return maxlen
标签:重复 length return sci 计算 def 不用 cab substr
原文地址:https://blog.51cto.com/jayce1111/2381423