题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含‘a’~'z'的字符。
def longest_without_duplication(s):
max_s = ''
cnt = 0
max_cnt = 0
begin,end=0,len(s)-1
while begin<=end:
if s[begin] not in max_s:
max_s +=s[begin]
cnt +=1
else:
index = max_s.index(s[begin])
max_s = max_s[max_s.index(s[begin]) + 1:] + s[begin]
cnt = len(max_s)
if cnt>max_cnt:
max_cnt = cnt
begin += 1
return max_cnt
注:使用动态规划的思想。存储到当前字符最长的不重复字符串。当判断下一个字符时,分两种情况:
1、如果下个字符在前一个最长不重复字符串没出现过,直接加入最长字符串
2、如果下个字符再之前出现过了,则查找出在最长字符串的位置,然后截取掉,并将剩下的最长不重复字符串加入当前字符,组成最新的最长不重复字符串
使用一个变量存储过程中最长不重复字符串的长度。