【问题标题】:Array of all possible combinations in the order of index from another array of strings - TYPESCRIPT从另一个字符串数组中按索引顺序排列的所有可能组合的数组 - TYPESCRIPT
【发布时间】:2020-07-10 03:23:27
【问题描述】:

我正在尝试从具有以下条件的另一个字符串数组中获取一个字符串数组:-

1:应包含数组第一个索引处单词的第一个字母与所有其他元素 EX - ["AH", "BEE", "JAMES"] --> ["ABEEJAMES"]

2: 应该在数组的第一个和第二个索引处包含单词的第一个字母与所有其他元素的连接 EX - ["AH", "BEE", "JAMES"] --> ["ABJAMES"] 这需要在数组的最后一个索引之前完成

输入字符串数组

const updateFullNameParts = ["AH", "BEE", "JAMES"];

当前实现

const noSpaceName = updateFullNameParts.join("");
   const createCombination = fullNameParts.map((name) => {
       const fullNamePartsCopy = fullNameParts;
         const innerResult = fullNamePartsCopy.map((nameCopy) => {
            let innerCopy = "";
            for (let i = 0; i < fullNamePartsCopy.length; i++) {
              if (name === fullNamePartsCopy[i]) {
                innerCopy = innerCopy + fullNamePartsCopy[i];
              } else if (nameCopy === fullNamePartsCopy[i])
                innerCopy = innerCopy + fullNamePartsCopy[i];
              else innerCopy = innerCopy + fullNamePartsCopy[i].slice(0, 1);
            }
            return innerCopy;
          });

预期的字符串数组

["ABEEJAMES", "ABJAMES", "ABJ", "AHBJAMES", "ABEEJ", "AHBEEJAMES", "AHBEE"]

数组不应包含

["BJAMES", "AB", "BAJAMES", "A"]

基本上,数组应该只包含按索引顺序排列的组合。

对此有低时间复杂度的解决方案吗?

【问题讨论】:

  • “AHBJ”应该也有吧?
  • 是的,它应该在那里

标签: javascript arrays typescript


【解决方案1】:

首先从每个单词列出。 (第一个字母和整个单词)。 然后使用几个forEach 循环创建可能的单词列表。

const updateFullNameParts = ["AH", "BEE", "JAMES"];

const list = (arr) => {
  let output = [""];
  arr.forEach((word) => {
    const items = [word[0], word];
    const temp = [];
    output.forEach((xx) => items.forEach((yy) => temp.push(`${xx}${yy}`)));
    output = [...temp];
  });
  
  // Add special cases.
  // First word and second word
  output.push(arr.slice(0, 2).join(''));
  
  return output;
};

console.log(list(updateFullNameParts));

另一个变体并用reduce简化

const arr = ["AH", "BEE", "JAMES"];

const list = arr.reduce(
  (acc, word) => [word[0], word].flatMap((yy) => acc.map((xx) => `${xx}${yy}`)),
  [""]
);
console.log(list);

【讨论】:

  • 列表中是否也可以包含 AHBEE??
  • @HarshNagalla,是的。这将是特殊情况,您可以在列表生成结束时添加。我已经更新了第一种方法中的答案,添加了特殊情况。
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 2014-07-07
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 2015-09-06
相关资源
最近更新 更多