Longest Substring Without Repeating Characters
文字列を調べて、各文字が1回だけ現れる連続した文字列を探します。coddycodeでは、ycodeには5種類の文字があり、繰り返しを含まないそれより長い文字列はないため、答えは5です。
考えられるすべての文字列を調べる方法でも解けますが、時間がかかります。より速い方法では、繰り返しを含まない2つの位置の間のウィンドウを維持します。右端を一度に1文字ずつ進めます。新しい文字がすでにウィンドウ内にある場合は、左端をその文字が前に現れた位置のすぐ次まで移動します。各文字の最後の位置を記録しておけば、この移動をすぐに行えるため、文字列を読むのは1回だけです。
文字列 s を受け取り、同じ文字が複数回現れない最長部分文字列(連続する文字の並び)の長さを返す、lengthOfLongestSubstring という名前の関数を書いてください。
大文字と小文字は異なる文字なので、a と A は重複ではありません。
制約: 1 <= s.length <= 5 * 10^4。s に含まれるのは英字(小文字と大文字)と数字のみです。
関数
- arg1string
- 戻り値integer
例
- 入力
- arg1 = "coddycode"
- 出力
- 5
- 入力
- arg1 = "racecar"
- 出力
- 4
- 入力
- arg1 = "a1b2a3b"
- 出力
- 5
提出時に隠しテスト+12件
ヒント
1つずつ開いてください。開くたびに少しずつ答えに近づきます。
部分文字列とは、文字列の連続した一部分です。そのため、同じ文字に2回出会うことなく進める、最も長い範囲を探します。
左端と右端のあるウィンドウを保ちます。右側に1文字ずつ広げ、新しい文字がすでにウィンドウ内にある場合にだけ左端を動かします。
各文字が最後に出現したインデックスを保存します。新しい文字が左端以降で最後に出現していた場合、左端をそのインデックスの1つ先に移動します。左端が後戻りすることはなく、答えはこれまでに得られた最も幅の広いウィンドウです。
この問題の詳しい解説は準備中です。
Python
def lengthOfLongestSubstring(s):
# ここにコードを書いてくださいケース1
ケース2
ケース3
入力
arg1 = "coddycode"
期待値
5