javascript - 使用 JavaScript 解决这个编码难题

标签 javascript arrays algorithm scope closures

使用说明如下:

“编写一个函数,从列表中找到一个单词的所有变位词。你将得到两个输入,一个单词和一个包含单词的数组。你应该返回一个包含所有变位词的数组,如果有的话,你应该返回一个空数组没有。例如:

anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['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循环去匹配需要匹配的东西。但是,我似乎在处理范围和不断破坏功能方面遇到了一些问题,所以我求助于你们这些聪明的人。如果您有时间,我将不胜感激如何从这里解决这个问题的提示。

最佳答案

你基本上需要看看有没有permutation您的第一个字符串出现在数组中。

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

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 的使用,一种在某些条件下将数组简化为几个值的非常方便的方法。

请注意我还没有对此进行测试,所以如果有任何问题请询问。

关于javascript - 使用 JavaScript 解决这个编码难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40120073/

相关文章:

javascript - 使用 for 循环比较数组中的数字

java - 下载加速

algorithm - 翻转二维列表(或列表列表)的维度,其中每个子列表具有相等的长度

javascript - 在 Javascript 中可以删除特权吗?

Javascript:从属性匹配但没有 forEach 的数组中删除前 X 项?

javascript - 意外的 token 非法 - javascript 中的 ckeditor 值

python - Numpy 中数组数组中的元素明智比较

java - 如何避免全局外部变量作为递归函数的输出

javascript - 使用 Web Audio API 连接多个声卡输入

javascript - 分割在 ng-repeat 指令内创建的字符串(ng-model)