48-繰り返される文字のない最長の部分文字列-python

質問:文字列から繰り返し文字を含まない最長の部分文字列を見つけて、最長の部分文字列の長さを計算してください。文字列に「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

注:動的計画法のアイデアを使用してください。現在の文字の最長の一意の文字列を格納します。次のキャラクターを判断するとき、2つのケースがあります:

1.次の文字が前の最長の一意の文字列に表示されない場合は、最長の文字列を直接追加します

2.次の文字が以前に出現した場合は、最長の文字列の位置を見つけてそれをインターセプトし、残りの最長の非反復文字列を現在の文字に追加して、最新の最長の非反復文字列を形成します。

可変ストアドプロシージャでは、最長の一意の文字列の長さを使用します。

おすすめ

転載: blog.csdn.net/wh672843916/article/details/105503625