您的位置:首页 > 编程语言 > Python开发

[LintCode 384] 最长无重复字符的子串(Python)

2017-09-04 17:02 531 查看

题目描述

给定一个字符串,请找出其中无重复字符的最长子字符串。

样例

例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。

对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。

思路

遍历字符串中的每一个元素。借助一个辅助键值对来存储某个元素最后一次出现的下标。用一个整形变量存储当前无重复字符的子串开始的下标。

代码

class Solution:
"""
@param: s: a string
@return: an integer
"""
def lengthOfLongestSubstring(self, s):
# write your code here
res = 0
if s is None or len(s) == 0:
return res
d = {}
tmp = 0
start = 0
for i in range(len(s)):
if s[i] in d and d[s[i]] >= start:
start = d[s[i]] + 1
tmp = i - start + 1
d[s[i]] = i
res = max(res, tmp)
return res


复杂度分析

时间复杂度O(n),空间复杂度O(n)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: