質問:文字列から繰り返し文字を含まない最長の部分文字列を見つけて、最長の部分文字列の長さを計算してください。文字列に「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.次の文字が以前に出現した場合は、最長の文字列の位置を見つけてそれをインターセプトし、残りの最長の非反復文字列を現在の文字に追加して、最新の最長の非反復文字列を形成します。
可変ストアドプロシージャでは、最長の一意の文字列の長さを使用します。