首页 >web前端 >js教程 >代码战争 - 二对一

代码战争 - 二对一

Barbara Streisand
Barbara Streisand原创
2025-01-06 08:50:42967浏览

问候。

Codewars - Two to One

我在本系列中发布了 Codewars 挑战和我的思考过程。我尽可能使用 JS 和 Node 18。只是为了清楚起见,我正在合理使用它们。

好吧,这多汁。本质上,您必须删除字符串中的重复项,对剩下的内容进行排序,然后连接两个字符串。不完全按照这个顺序。事实上,我以完全相反的方式做到了这一点。我还为一个非常具体的步骤构建了一个实用函数(删除重复项)。


首先,连接两个字符串。简单:

let longest = s1 + s2;

第二,拆分字母:

let array = new Array(s1.length + s2.length);
for (let i = 0 ; i < s1.length + s2.length ; i++ ){
    array[i] = longest[i];
  }

第三,对字母进行排序:

array = array.sort((a, b) => a.localeCompare(b));
// (a, b) => a.localeCompare(b)  THIS IS REDUNDANT, but I leave it as a reminder

四、删除重复项:

function keepFirstLetter(array){
  let arrayFixed = new Array(array.length);
  let counter = 0;
  arrayFixed[0] = array[0];


  for (let i = 0 ; i < array.length ; i++ ){
    if (arrayFixed[counter] != array[i]){
      counter++;
      arrayFixed[counter] = array[i];
    }
  }

  return arrayFixed;
}

五、清理:

array = array.join("");

最后,将拼图的每一块放在一起:

function longest(s1, s2) {
  let array = new Array(s1.length + s2.length);

  let longest = s1 + s2;

  for (let i = 0 ; i < s1.length + s2.length ; i++ ){
    array[i] = longest[i];
  }

  array = array.sort((a, b) => a.localeCompare(b));

  array = keepFirstLetter(array);

  array = array.join("")

  return array;
}

function keepFirstLetter(array){
  let arrayFixed = new Array(array.length);
  let counter = 0;
  arrayFixed[0] = array[0];

  for (let i = 0 ; i < array.length ; i++ ){
    if (arrayFixed[counter] != array[i]){
      counter++;
      arrayFixed[counter] = array[i];
    }
  }

  return arrayFixed;
}

它绝对不是高性能的。我不喜欢第二个循环。而且也不是那么干净。有一天我需要重新审视这个。

祝你一切顺利。喝水???.

上一页

以上是代码战争 - 二对一的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn