使用说明如下:
“编写一个函数,从列表中找到一个单词的所有变位词。你将得到两个输入,一个单词和一个包含单词的数组。你应该返回一个包含所有变位词的数组,如果有的话,你应该返回一个空数组没有。例如:
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/