- 自己思路
建立两个指针,外循环为首指针,内循环为尾指针,从左至右检查,每次尾指针右移将无重复字符子串存入maxlength变量,循环结束输出。
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
maxlen = 0
for i in range(len(s)):
for j in range(len(s)):
if s[j] not in s[i:j]:
maxlen = max(maxlen,j-i+1)
else:
break
return maxlen
问题
时间复杂度为O(n2)参考Discuss
建立字典进行已查询字符存储,利用字典的查询时间复杂度O(n)的特点,减小时间复杂度。代码
class Solution:
# @return an integer
def lengthOfLongestSubstring(self, s):
start = maxLength = 0
usedChar = {}
for i in range(len(s)):
if s[i] in usedChar and start <= usedChar[s[i]]:
start = usedChar[s[i]] + 1
else:
maxLength = max(maxLength, i - start + 1)
usedChar[s[i]] = i
return maxLength
- 总结
对于需要检查元素在序列中重复问题,可利用字典来进行成员资格检查,减少时间复杂度。