Computer >> Máy Tính >  >> Lập trình >> Javascript

Điểm giống nhau giữa các chuỗi khác nhau trong JavaScript

Chúng ta có hai mảng Numbers, và chúng ta bắt buộc phải viết một hàm giao nhau () để tính giao điểm của chúng và trả về một mảng có chứa các phần tử giao nhau theo thứ tự bất kỳ. Mỗi phần tử trong kết quả phải xuất hiện nhiều lần như nó hiển thị trong cả hai mảng.

Ví dụ:

Nếu đầu vào là -

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

Sau đó, đầu ra phải là -

['world', 'you'];

Phương pháp tiếp cận:

Nếu các mảng được sắp xếp, chúng ta có thể sử dụng phương pháp tiếp cận hai con trỏ với ban đầu cả hai trỏ về 0 ở đầu mảng tương ứng và chúng ta có thể tiếp tục tăng con trỏ tương ứng và đó sẽ là phức hợp O (m + n) w.r.t. thời gian trong đó m và n là kích thước của mảng.

Nhưng vì chúng tôi chưa sắp xếp các mảng nên không có logic nào trong việc sắp xếp các mảng và sau đó sử dụng ứng dụng này, chúng tôi sẽ kiểm tra mọi giá trị của giá trị đầu tiên so với giá trị thứ hai và tạo một mảng xen kẽ.

Điều này sẽ tiêu tốn của chúng tôi O (n ^ 2) thời gian.

Do đó, hãy viết mã cho chức năng này -

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

[ 'world', 'you' ]