在 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.