【LeetCode】3.Longest Substring Without Repeating Characters 解答・解説【Python】

この記事は約3分で読めます。

 

問題

原文

Given a string s, find the length of the longest substring without repeating characters.

 

Example 1:

Example 2:

Example 3:

 

Constraints:

  • 0 <= s.length <= 5 * 104
  • s consists of English letters, digits, symbols and spaces.

 

内容

文字列sが与えられます。最大部分文字列を見つけてください。

 

例3: s = “pwwkew”

“wke”が最大部分文字列であり、その長さは3です。

“pwke”は各要素の場所を変えてしまっているのでだめなようです。

 

※正しくない可能性があります。

方針

前提

・2つのポインタを使う

・それぞれのポインタは文字列sにおける部分文字列の左端と右端を指すインデックス

※左右のインデックスの差が部分文字列の長さを表す

実装のイメージ

・文字列s内の各文字を全探索する

・各文字が初出現の要素である限り右のポインタを右に伸ばし続ける

・既出要素がある場合で、その既出要素が左右のポインタの外側にある場合は右のインデックスを右に伸ばし続ける

・既出要素がある場合で、その既出要素が左右のポインタの内側にある場合は、左ポインタを右ポインタの右隣りに変更する

 

イメージ ※赤が左、青が右ポインタ

まずは左右のポインタを広げていく

a b c b b c

a b c b b c

a b c b b c ※bは既出(2文字目)なので、左ポインタを移動

a b c b b c ※左ポインタを最初のbの右隣りにして再スタート

↑この操作を最後まで繰り返して左右のポインタの幅が最大だった時の値を返す。

 

解答

解答1:

 

 

解答2

 

 

補足・参考・感想

参考

自分が後で見返して理解しやすいように、ツールを使って図解しつつ、記事に組み込めるようにしたい。

 

前:704. Binary Search

次:12. Integer to Roman

LeetCode 解答・解説記事一覧

コメント