在 JavaScript 中刪除第一個字串中不在第二個字串中的元素


問題陳述要求使用者輸入兩個字串陣列,我們需要在 JavaScript 中刪除第一個字串中不存在於第二個字串中的元素。

同樣的問題陳述也可以看作是給定兩個字串陣列,問題的解決方案應該返回原始第一個字串陣列的新版本,使得第一個字串陣列只包含第二個字串陣列中存在的元素,同時記住在查詢兩個字串陣列的交集或刪除第二個字串陣列中不存在的元素時保留原始第一個字串的順序。

什麼是 JavaScript 中的 Map?

問題陳述有效地使用 Map 資料結構作為核心邏輯,刪除字串陣列 2 中不存在的元素,在對字串陣列 1 進行主要操作的上下文中,其中字串陣列 1 和字串陣列 2 將由使用者作為輸入源提供。

Map 既是 JavaScript 中一種鍵值對資料結構,也是一種函式,但兩者在語法上有所不同。Map 資料結構中的鍵值對可以是任何資料型別。它可以用於插入、刪除、更新或執行任何操作。

語法和示例如下:

let colorMap = new Map([
        ["Red", 2],
        ["Blue", 3],
        ["Yellow", 5]
    ]);
     
console.log(colorMap);

輸出

Map { 'Red' => 2, 'Blue' => 3, 'Yellow' => 5 }

演算法

步驟 1 - 宣告一個名為 findCommonInStringArray 的函式,該函式接收字串陣列 1 和陣列 2 作為輸入。

步驟 2 - 使用 split 方法分割兩個字串陣列的每個字元,並在其中傳遞一個空格分隔符作為引數。

步驟 3 - 在 JavaScript 中建立一個 Map 資料結構,它是一個有效的資料結構,用於搜尋、插入或刪除陣列元素,具有最佳時間複雜度。

步驟 4 - 遍歷字串陣列 2 的每個字元,並將數值 1 的計數插入到每個傳遞的單個唯一元素中。

步驟 5 - 我們已經使用 Map 資料結構指出了字串陣列 2 的每個單個元素,併為每個字元標記了數值 1。

步驟 6 - 使用 JavaScript 中的 filter 方法過濾字串陣列 1,負責過濾掉字串陣列 2 中也存在的元素,這些元素現在已對映到您的 newMap 資料結構中。

步驟 7 - 使用 JavaScript 中的 join 方法將字串陣列 2 中存在的公共字元連線到字串陣列 1 本身,該方法將字串陣列 1 中的字元連線到整個字串中。

示例

function findCommonInStringArray(arr1,arr2)
{
       let stringArray1 = arr1.split('');
       let stringArray2 = arr2.split('');
    
       const newMap = {};
    
       stringArray2.forEach(element=>{
        newMap[element] =1;
    })
        
    stringArray1 = stringArray1.filter(element => {
      return newMap.hasOwnProperty(element);
   });

   return stringArray1.join('');
}
const str1 = 'abcdefgh';
const str2 = 'bananana';

const newStringArray1 = findCommonInStringArray(str1,str2);
console.log(newStringArray1);

輸出

ab

時間和空間複雜度

split 方法的時間複雜度取決於您要分割的字元數量,導致最壞情況下的時間複雜度為 O(n),然後是 Map 資料結構,它將花費 O(n) 的遍歷時間來使用數值 1 標記單個元素,JavaScript 中的 filter 方法也將遍歷 O(n) 的最壞時間複雜度來過濾掉字串陣列 2 中不存在的元素,總計為 O(n) 的時間複雜度和 O(1) 的空間複雜度,因為我們沒有分配任何額外的記憶體。

結論

這就是我們如何透過邏輯思維和編碼的方式解決上述問題陳述,藉助 JavaScript 方法(如 split 和 filter 方法)及其最有效的用例中的 Map 資料結構。

更新於:2023-08-21

93 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.