使用JavaScript解决这个编码难题很麻烦
Trouble solving this coding puzzle using JavaScript
使用说明如下:
"编写一个函数,从列表中找到一个单词的所有字谜。您将得到两个输入:一个单词和一个包含单词的数组。您应该返回一个包含所有字谜的数组,如果没有字谜则返回一个空数组。例如:
字谜("神父",[‘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
的使用,这是一种非常方便的方法,可以在某些条件下将数组简化为几个值。
注意我还没有测试过这个,所以如果有任何问题请问。
相关文章:
- 麻烦将coffee脚本片段移动到rails中自己的类中
- 使用JavaScript获取Google地图上显示的所有推文时遇到麻烦
- Javascript中getDay的麻烦
- Javascript出生日期难题
- 在 Javascript 中添加数字时遇到麻烦
- 使用QuaggaJS-Javascript条形码扫描仪的麻烦
- 拉斐尔在片场制造麻烦
- 暴露和隐藏的麻烦”;滑出“;航行
- 你能帮我解决感冒的麻烦吗
- 在angular中搜索的麻烦
- 无需麻烦的js文件合并
- 使用 Coffeescript 和 Express .js 将变量传递给 Jade 时遇到麻烦
- j查询滚动顶部麻烦
- 在 Node.js 中传播错误回调,并避免所有额外的麻烦
- Perl / LWP 提交 JavaScript 表单的麻烦
- 在 jquery 中附加选项以选择的麻烦
- 编写正确的 jQuery 插件时遇到麻烦
- WordPress表单麻烦
- 在三.js中更改纹理时遇到麻烦
- 使用JavaScript解决这个编码难题很麻烦