对照数组测试单词的变位符-Javascript



到目前为止。。我有这个:

function anagrams(word, words) {
for(let i = 0; i <= words.length; i++){
const aCharMap = buildCharMap(word);
const bCharMap = buildCharMap(words[i]);
if(Object.keys(aCharMap).length !== Object.keys(bCharMap).length) {
words.pop(words[i])
}
for (let char in aCharMap) {
if (aCharMap[char] !== bCharMap[char]) {
words.pop(words[i]);
}
}
console.log(word);
console.log(words);
}
}
function buildCharMap(str) {
const charMap = {};
for (let char of str.replace(/[^w]/g, '').toLowerCase()) {
charMap[char] = charMap[char] + 1 || 1;
}
return charMap;
}

如果你通读代码,眼前的问题是显而易见的,但这里是

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

anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']

anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer']

anagrams('laser', ['lazing', 'lazy', 'lacer']) => []

pop是按照您的使用方式使用的吗?

或者你可以这样做:

function anagrams(word, words) {
let result = [];
const aCharMap = buildCharMap(word);
// you also had a off-by-one error in loop 
for (let i = 0; i < words.length; i++) {
const bCharMap = buildCharMap(words[i]);
let isAnagram = (a, b) => {
if (Object.keys(a).length !== Object.keys(b).length) return false;
for (let char in a) {
if (aCharMap[char] !== b[char]) {
return false
}
}
return true;
}
if (isAnagram(aCharMap, bCharMap)) result.push(words[i])
}
function buildCharMap(str) {
const charMap = {};
for (let char of str.replace(/[^w]/g, '').toLowerCase()) {
charMap[char] = charMap[char] + 1 || 1;
}
return charMap;
}
return result
}
console.log(anagrams("test", ["estt", "ttee", "tset"]))

最新更新