在 JavaScript 中删除第一个字符串中不在第二个字符串中的元素
问题陈述要求用户给定两个字符串数组作为用户输入,我们需要在 javascript 中删除第一个字符串中存在但在第二个字符串中不存在的元素。
同样的问题陈述也可以看作是给定两个字符串数组,问题陈述的解决方案应该返回原始第一个字符串数组的较新版本,这样第一个字符串数组应该只包含第二个字符串数组中存在的元素,记住在查找两个字符串数组的交集或删除第二个字符串数组中不存在的元素时保留原始第一个字符串的顺序。
JavaScript 中的 Map 是什么?
问题陈述有效地使用 map 数据结构作为核心逻辑,在字符串数组 1 中将要发生的主要操作上下文中删除与字符串数组 2 中存在的元素不常见的元素,其中字符串数组 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 中创建一个映射数据结构,这是一种高效的数据结构,用于以最佳时间复杂度搜索、插入或删除数组元素。
步骤 4 - 遍历字符串数组 2 元素的每个字符,并将数字 1 的计数插入到传递的每个单独和唯一元素中。
步骤 5 - 我们已经使用映射数据结构指出了字符串数组 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 数据结构。