これはかなり標準的なインタビューの質問です。文字を繰り返さずに最も長い部分文字列を探します。ここにテストケースがあります。Pythonで文字を繰り返さない最長の部分文字列
abcabcbb -> 3
bbbbb -> 1
pwwkew -> 3
bpfbhmipx -> 7
tmmzuxt -> 5
ここでは2つのポインタでかなり簡単なアプローチを使用して私のコードです。
def lengthOfLongestSubstring(s):
checklist = {}
starting_index_of_current_substring = 0
length_of_longest_substring = 0
for i, v in enumerate(s):
if v in checklist:
starting_index_of_current_substring = checklist[v] + 1
else:
length_of_current_substring = i - starting_index_of_current_substring + 1
length_of_longest_substring = max(length_of_current_substring, length_of_longest_substring)
checklist[v] = i
return length_of_longest_substring
私のコードは、最後のものを除くすべてのテストケースを渡します(実際の4、予想される5)。最後のテストケースを処理するためにコードを修正する手助けをすることができますか?私はアルゴリズムを再考したくありません。
あなたが先に開始ポインタをジャンプするとき、あなたはストリングで、もはや文字を考慮するために、 'checklist'を解決しません。 – user2357112
Downvoters、なぜ説明できますか?この質問に答えるのに問題がありますか? –
@ChihebNexus:今削除された回答の下降音について話しているなら、どちらも間違っていました。文字が一番長い部分文字列の長さを見つけるのではなく、文字を数えただけなので、あなたのことは間違っていました。 (おそらくサブストリングではなく、連続していないサブシーケンスを念頭に置いていたかもしれません。) – user2357112