使用JavaScript解决这个编码难题很麻烦

Trouble solving this coding puzzle using JavaScript

本文关键字:难题 麻烦 编码 JavaScript 解决 使用      更新时间:2023-09-26

使用说明如下:

"编写一个函数,从列表中找到一个单词的所有字谜。您将得到两个输入:一个单词和一个包含单词的数组。您应该返回一个包含所有字谜的数组,如果没有字谜则返回一个空数组。例如:

字谜("神父",[‘aabb’,‘abcd’,‘bbaa’,'爸爸'])=>[‘aabb’,‘bbaa]"

我截取了一个片段,它接受第一个参数并提供所有可能的字符组合。我现在的麻烦是弄清楚如何将这个数组与第二个参数匹配,并返回一些结果。

function allAnagrams (word,words) {
  
  if (word.length < 2) {
    return [word];
  } else {
      var allAnswers = [];
      
      
      for (var i = 0; i < word.length; i++) {
        var letter = word[i];
        var shorterWord = word.substr(0, i) + word.substr(i + 1, word.length - 1);
        var shortwordArray = allAnagrams(shorterWord);
        for (var j = 0; j < shortwordArray.length; j++) {
          allAnswers.push(letter + shortwordArray[j]);
          
        }
        
      }
      
      return allAnswers;
  }
  
}
allAnagrams("abc",["acb","cba","bac","bca"]);

我的直觉是把单词分成一个数组,然后再嵌套一个for循环来匹配需要匹配的内容。然而,我似乎遇到了一些问题,处理范围和不断破坏的功能,所以我已经转向你们聪明的人。如果你有时间,我希望你能告诉我如何从这里开始解决这个问题。

您基本上需要查看第一个字符串是否有任何排列出现在数组中。

比较两个字符串是否互为排列的一种快速方法是对两个字符串排序并比较:

function stringSort(string) {
  return string.split('').sort().join('');
}
function isAnagram(first, second) {
  // are the two sorted strings equal, if so then anagram
  return stringSort(first) == stringSort(second);
}
现在,我们可以使用这些方便的函数来帮助我们构建最终所需的函数:
function allAnagrams(word, words) {
  return words.filter(function(element) {
    return isAnagram(word, element);
  });
}

注意Array#filter的使用,这是一种非常方便的方法,可以在某些条件下将数组简化为几个值。

注意我还没有测试过这个,所以如果有任何问题请问。