使用 JavaScript 查詢兩個相同字元之間的最長子字串


在這個問題陳述中,我們的任務是藉助 Javascript 功能找到兩個相同字元之間的最長子字串。此任務可以透過使用 map 函式來跟蹤兩個相同字元來完成。

給定問題的邏輯

問題說明我們必須在給定的字串中找到兩個相同字元之間的最長子字串。例如,如果我們有一個像 'abcdefa' 這樣的字串,則有兩個相同的字元 'a',它們有 5 個字元稱為 'bcdef',因此這將被稱為最長子字串。為了實現上述給定的問題,我們將使用 map 方法來跟蹤第一個和最後一個相同字元,然後顯示相同字元之間子字串的輸出,

演算法

步驟 1 - 透過定義函式 longestSubstring 並傳遞引數 'str' 來啟動程式。

步驟 2 - 之後,我們將宣告名為 maxLength 和 begin 的變數,分別用 0 和 -1 初始化這些變數。

步驟 3 - 現在,我們將使用 Map 函式和 new 關鍵字建立一個名為 charMap 的對映。

步驟 4 - 在此步驟中,我們將啟動一個 for 迴圈並執行此迴圈直到字串 str 的長度。

步驟 5 - 在所有上述步驟之後,建立另一個變數以獲取字串中每個字元的詳細資訊並檢查條件。

步驟 6 - 當我們在 char 變數中獲得每個字元時,是時候檢查該字元是否之前已經出現過。如果給定條件為真,則將其新增到先前的索引值中。

步驟 7 - 在檢查所有上述條件後,我們將獲得屬於字串中存在的相同字元之間的子字串,並將輸出顯示到控制檯。

演算法程式碼

//function to find the longest substring
function longestSubstring(str) {
   let maxLength = 0;
   let begin = -1;
   let charMap = new Map();
   for (let i = 0; i < str.length; i++) {
      const char = str[i]; 
      // condition for checking the character has seen before
      if (charMap.has(char)) {
         const previousIndex = charMap.get(char);
         const len = i - previousIndex - 1;
         if (len > maxLength) {
            maxLength = len;
            begin = previousIndex + 1;
         }
      } else {
         charMap.set(char, i);
      }
   }
   if (begin === -1) {
      return "";
   }
   return str.substring(begin, begin + maxLength);
}
const str = "abcaabcdaaaefghij";
const longSubstr = longestSubstring(str);
console.log("The longest substring between same characters: ");
console.log(longSubstr);

複雜度

假設 n 是輸入字串 str 的長度,那麼執行上述函式所需的時間為 O(n)。因為該函式只迭代字串一次,並且對每個字元執行常數時間操作。假設 m 是輸入字串中相同字元之間字元的數量,那麼程式碼的空間複雜度為 O(m)。因為程式碼使用 map 函式來儲存每個字元出現的索引,並且其大小等於唯一字元的大小。

結論

我們已經瞭解瞭如何使用 Javascript 函式來識別兩個相同字元之間的最長子字串。此外,我們上面實現的方法有效地從輸入字串中獲取子字串。

更新於: 2023年5月18日

417 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.