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、如果下个字符再之前出现过了,则查找出在最长字符串的位置,然后截取掉,并将剩下的最长不重复字符串加入当前字符,组成最新的最长不重复字符串

使用一个变量存储过程中最长不重复字符串的长度。

原文地址:https://www.cnblogs.com/kingshine007/p/11471499.html