Finding the common streak in two arrays in JavaScript


We are required to write a JavaScript function that takes in two arrays of literals, let’s call them arr1 and arr2.

The function should find the longest common streak of literals in the arrays. The function should finally return an array of those literals.

For example −

If the input arrays are −

const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = ['k', 'j', 'b', 'c', 'd', 'w'];

Then the output array should be −

const output = ['b', 'c', 'd'];

Example

Following is the code −

const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = ['k', 'j', 'b', 'c', 'd', 'w'];
const longestCommonSubsequence = (arr1 = [], arr2 = []) => {
   let str1 = arr1.join('');
   let str2 = arr2.join('');
   const arr = Array(str2.length + 1).fill(null).map(() => Array(str1.length + 1).fill(null));
   for (let j = 0; j <= str1.length; j += 1) {
      arr[0][j] = 0;
   }
   for (let i = 0; i <= str2.length; i += 1) {
      arr[i][0] = 0;
   }
   for (let i = 1; i <= str2.length; i += 1) {
      for (let j = 1; j <= str1.length; j += 1) {
         if (str1[j - 1] === str2[i - 1]) {
            arr[i][j] = arr[i - 1][j - 1] + 1;
         } else {
            arr[i][j] = Math.max(
               arr[i - 1][j],
               arr[i][j - 1],
            );
         }
      }
   }
   if (!arr[str2.length][str1.length]) {
      return [''];
   }
   const res = [];
   let j = str1.length;
   let i = str2.length;
   while (j > 0 || i > 0) {
      if (str1[j - 1] === str2[i - 1]) {
         res.unshift(str1[j - 1]);
         j -= 1;
         i -= 1;
      }
      else if (arr[i][j] === arr[i][j - 1]) {
         j -= 1;
      }
      else {
         i -= 1;
      }
   }
   return res;
};
console.log(longestCommonSubsequence(arr1, arr2));

Output

Following is the output on console −

['b', 'c', 'd']

Updated on: 11-Dec-2020

134 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements