ホームページ > ウェブフロントエンド > jsチュートリアル > スライディング ウィンドウ手法を使用した、繰り返し文字を含まない最長の部分文字列

スライディング ウィンドウ手法を使用した、繰り返し文字を含まない最長の部分文字列

Patricia Arquette
リリース: 2024-12-10 11:14:16
オリジナル
958 人が閲覧しました

ソリューションのステップを詳しく見て、各ステップがどのように機能するかを見てみましょう

次の入力を受け取ったと仮定します:
Longest Substring Without Repeating Characters with Sliding Window Technique

見つかった文字を格納する空のセットと、見つかった最長の部分文字列を保持する変数を作成します。
Longest Substring Without Repeating Characters with Sliding Window Technique

ここで、right が指す値がセット内に存在するかどうかを確認します。存在しない場合は、セットに追加し、右に 1 つ先に進みます。その後、セットのサイズをlongSubstr変数に格納されている値と比較して、最長の部分文字列を更新します。
Longest Substring Without Repeating Characters with Sliding Window Technique

右が指す値がセット内にあるかどうかを確認します。そうでないことがわかったので、それをセットに追加し、右に 1 ずつインクリメントします。その後、セットのサイズと longSubstr の値の間の最大値を取得します。
Longest Substring Without Repeating Characters with Sliding Window Technique

right が指す値がセット内にあるかどうかを確認します。つまり、c がセット内にないことを意味します。したがって、それをセットに追加し、右に 1 ずつ増分して、最大部分文字列を確認します。
Longest Substring Without Repeating Characters with Sliding Window Technique

ここで、right が指す値 (a) がセット内に存在するかどうかを確認します。そうなっていることがわかったので、セットからそれを削除し、左に 1 歩前に移動します。
Longest Substring Without Repeating Characters with Sliding Window Technique

右が指す値は b であり、集合内に存在します。

したがって、左ポインタを 1 つ前に移動し、セットから b を削除します。
Longest Substring Without Repeating Characters with Sliding Window Technique

これで、b がセット内にあることがわかりました。そのため、left が指す値を削除し、左に 1 ステップ前進します。
Longest Substring Without Repeating Characters with Sliding Window Technique

右が指す値は c であり、集合内に存在します。
したがって、それをセットから削除し、左に 1 つ前に移動します。
Longest Substring Without Repeating Characters with Sliding Window Technique

同じ手法を ステップ 17 まで続けて、次の結果が得られます:
Longest Substring Without Repeating Characters with Sliding Window Technique

これは JavaScript の実装です

function longestSubstring(s) {
  let left = 0
  let right = 0

  let maxSubstr = 0
  let set = new Set()

  while (right < s.length) {
    const currentChar = s[right]

    if (!set.has(currentChar)) {
      set.add(currentChar)
      right++
      maxSubstr = Math.max(maxSubstr, right - left) // Update max substring length
    } else {
      set.delete(s[left])
      left++
    }
  }

  return maxSubstr
}

let inputString = 'abcabcbb'
console.log(longestSubstring(inputString)) // Output: 3 ("abc")

ログイン後にコピー

以上がスライディング ウィンドウ手法を使用した、繰り返し文字を含まない最長の部分文字列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート