arrays - 从列表中查找一个单词的所有字谜
问题描述
试图解决代码战中的任务:
编写一个函数,从列表中找到一个单词的所有字谜。您将获得两个输入一个单词和一个带有单词的数组。如果没有,您应该返回所有字谜的数组或空数组。
anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']
这是我的解决方案:
function anagrams(str, arr) {
let newArr = [];
for(let i = 0; i < arr.length; i++) {
let result = str.split('').every(function(letter) {
return arr[i].indexOf(letter) != -1;
});
if(result === true) {
newArr.push(arr[i]);
}
}
return newArr;
}
哪个无法正常工作:它在需要["aabb","abcd","bbaa"]
时显示['aabb', 'bbaa']
。
先感谢您。
解决方案
尽管您的函数正确地检查了单词的每个字母是否出现在它的潜在字谜中,但它不会检查该字母的重复次数是否相同。
您可以通过首先确定每个不同字母的计数来解决此问题:
function getCounts(str) {
letterCount = {};
for (let letter of str) {
letterCount[letter] ??= 0;
letterCount[letter]++;
}
return letterCount;
}
function anagrams(str, arr) {
counts = getCounts(str);
return arr.filter(anagram =>
anagram.length === str.length &&
Object.entries(getCounts(anagram)).every(([letter, count]) =>
counts[letter] === count
)
);
}
console.log(anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']));
推荐阅读
- json - 在 swift 中使用 alamofire 将参数作为原始数据发送
- c# - Razor 内联辅助函数仅接受
字段 - windows - Internet Explorer FeatureControl 注册表项是否仍适用于 Windows 10 和 CHtmlView?
- python - 在 python 中使用类型别名然后将其声明为变量是个好主意吗?
- json - 将数组中包含的字符串值转换为数字
- c# - 如何将我的照片从 tmp 目录文件夹保存到 xamarin iOS 中的库/文档文件夹
- postgresql - CloudLinux 7.8 错误安装 postgresql 11 要求:llvm-toolset-7-clang >= 4.0.1
- powerapps - 在 PowerApps 中获取“表格未正确加载”
- java - 如何使用 selenium java 在画布中读写
- snowflake-cloud-data-platform - 在雪花中,SF 暂存和 SF 表存储有什么区别