原问题链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/#/description
问题定义:给定一个字符串,求出没有重复字母的最长子串。
思路:O(N^2)的算法最后一个测试用例无法通过,所以用空间换时间的思想。设字符串为s,使用一个数组L来保存以下标i所在字母为最后一个字母且没有重复字母的字符串的最大长度,使用HashMap(dic)来存储每一个字母在字符串中上一次出现的下标,遍历字符串,同步更新L和dic
时间复杂度:O(N)
class Solution(object):
def lengthOfLongestSubstring(self, s):
max_num,L,dic=0,[],{}
if(len(s)>0):
L.append(1)
max_num,dic[s[0]]=1,0
for i in range(1,len(s)):
if s[i] in dic:
if i-dic[s[i]]>L[i-1]:
L.append(L[i-1]+1)
else:
L.append(i-dic[s[i]])
dic[s[i]]=i
else:
dic[s[i]]=i
L.append(L[i-1]+1)
max_num=max(max_num,L[i])
return max_num