JavaScript中不同字符串的相似之处


我们有两个数字数组,需要编写一个intersection()函数来计算它们的交集,并返回一个包含交集元素的数组(顺序任意)。结果中的每个元素应该出现的次数与它在两个数组中出现的次数相同。

例如

如果输入为:

arr1 = ['hello', 'world', 'how', 'are', 'you'];
arr2 = ['hey', 'world', 'can', 'you', 'rotate'];

则输出应为:

['world', 'you'];

方法

如果数组已排序,我们可以使用双指针法,初始时两个指针都指向各自数组的开头(0),然后我们可以通过增加相应的指针来继续,这在时间上将是O(m+n)的复杂度,其中m和n是数组的大小。

但是由于我们有未排序的数组,因此对数组进行排序然后使用这种方法是没有意义的,我们将检查第一个数组中的每个值与第二个数组,并构造一个交集数组。

这将花费我们O(n^2)的时间。

因此,让我们为这个函数编写代码:

示例

代码如下:

arr1 = ['hello', 'world', 'how', 'are', 'you'];
arr2 = ['hey', 'world', 'can', 'you', 'rotate'];
const intersectElements = (arr1, arr2) => {
   const res = [];
   const { length: len1 } = arr1;
   const { length: len2 } = arr2;
   const smaller = (len1 < len2 ? arr1 : arr2).slice();
   const bigger = (len1 >= len2 ? arr1 : arr2).slice();
   for(let i = 0; i < smaller.length; i++) {
      if(bigger.indexOf(smaller[i]) !== -1){
         res.push(smaller[i]);
         bigger.splice(bigger.indexOf(smaller[i]), 1, undefined);
      }

   };
   return res;
};
console.log(intersectElements(arr1, arr2));

输出

控制台输出将为:

[ 'world', 'you' ]

更新于:2020年10月19日

79 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.