首页 > 解决方案 > 如何在数组中找到相同元素的子序列

问题描述

我正在为我的爱好任务寻找一种算法。

例如我们有测试数据用例:

var case1 = ['green', 'red', 'red', 'blue', 'green', 'green', 'green'];
var case2 = ['blue', 'blue', 'green', 'yellow', 'blue', 'orange', 'green', 'green', 'green', 'green'];
var case3 = ['purple', 'blue', 'blue', 'blue', 'red'];

输出:

var result1 = ['red', 'red', 'green', 'green', 'green'];
var result2 = ['blue', 'blue', 'green', 'green', 'green', 'green'];
var result3 = ['blue', 'blue', 'blue'];

谁能告诉我应该使用哪种算法?重复的经典方式 - 不像我看的那样。

标签: algorithmsequence

解决方案


因此,在 javascript 中,一个天真的实现将是:

function selectSequential(source) {
   var result = [];
   for (let i = 0; i < source.length; i++) {
      if ((i != source.length-1 && source[i+1] === source[i]) 
            || (i != 0 && source[i-1] === source[i])) {
         result.push(source[i]);
      }
   }
   return result;
}

推荐阅读