题目描述
给定一个字符串,请找出其中无重复字符的最长子字符串。
样例
例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。
对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。
思路
遍历字符串中的每一个元素。借助一个辅助键值对来存储某个元素最后一次出现的下标。用一个整形变量存储当前无重复字符的子串开始的下标。
def longest_substring(str):
if str == None or len(str)==0:
return 0
maxlen = 0 #最大的字串长度
position = {}#保存非重复字符最后的位置
start = 0#保存非重复字串开始的位置
for i in range(len(str)):
if (str[i] in position) and (position[str[i]] >= start) :
start = position[str[i]] +1
position[str[i]] = i
position[str[i]] = i
current_len = i-start+1 #当前非重复字串的长度
maxlen = max(maxlen, current_len)
return maxlen
if __name__ == '__main__':
print 'longest substring:'
str = 'abcabcbb'
print longest_substring(str)
时间复杂度 O(n) O ( n ) , 空间复杂度 O(n) O ( n )