48-最长不含重复字符的子字符串
题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含‘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、如果下个字符再之前出现过了,则查找出在最长字符串的位置,然后截取掉,并将剩下的最长不重复字符串加入当前字符,组成最新的最长不重复字符串
使用一个变量存储过程中最长不重复字符串的长度。