首頁 > web前端 > js教程 > 利用滑動視窗技術求最長無重複字元的子字串

利用滑動視窗技術求最長無重複字元的子字串

Patricia Arquette
發布: 2024-12-10 11:14:16
原創
953 人瀏覽過

讓我們分解解決方案步驟,看看每個步驟是如何運作的

我們假設我們收到以下輸入:
Longest Substring Without Repeating Characters with Sliding Window Technique

我們將建立一個空集合來儲存我們遇到的字母,並建立一個變數來保存我們找到的最長子字串。
Longest Substring Without Repeating Characters with Sliding Window Technique

現在,我們將檢查 right 指向的值是否存在於集合中。如果它不存在,我們會將其添加到集合中並向右移動一步。之後,我們將透過將集合的大小與 longSubstr 變數中儲存的值進行比較來更新最長的子字串。
Longest Substring Without Repeating Characters with Sliding Window Technique

我們將檢查 right 指向的值是否在集合中。我們發現它不是,所以我們將它添加到集合中並向右遞增 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)是否存在於集合中。我們看到它確實如此,因此我們將其從集合中刪除並向左前進一步。
Longest Substring Without Repeating Characters with Sliding Window Technique

right指向的值是b,它存在於集合中。

因此,我們將左指標向前移動一步,將 b 從集合中刪除。
Longest Substring Without Repeating Characters with Sliding Window Technique

現在我們看到b在集合中,所以我們刪除left指向的值並向左前進一步。
Longest Substring Without Repeating Characters with Sliding Window Technique

right指向的值是c,它存在於集合中。
因此,我們將其從集合中刪除並向左前進一步。
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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板