刚刚回到我的Javascript课程测试中,我错过了一个我非常肯定的问题。
如果两个字符串是anagrams,我们应该创建一个返回true的函数,否则返回false。我无法找到一个不会起作用的实例。我将不胜感激任何帮助!
这就是我所拥有的:
function isAnagram(str1, str2){
if(str1.length !== str2.length){
return false;
}
else{
for(var i = 0; i < str1.length; i++){
if(!str2.includes(str1[i])){
return false;
}
}
return true;
}
}
答案 0 :(得分:3)
替代解决方案。
const isAnagram = (s1, s2) => {
return lowerify(s1) == lowerify(s2);
}
const lowerify = str => str.toLowerCase().split('').sort().join('');
console.log(isAnagram("Arrigo Boito", "Tobia Gorrio"));
console.log(isAnagram("abc", "CBa"));
console.log(isAnagram("deep", "depp"));
&#13;
答案 1 :(得分:2)
它无法处理你有两个长度相等,使用相同字母但每个字母数不同的单词的情况。
这给出了误报:
console.log(isAnagram("deep", "depp"))
答案 2 :(得分:2)
它只检查str1
中每个字母str2
是否存在,无论它们出现多少次。
编辑:它也不会检查str2
是否包含str1
中未显示的字母。
function isAnagram(str1, str2) {
if (str1.length !== str2.length) {
return false;
} else {
for (var i = 0; i < str1.length; i++) {
if (!str2.includes(str1[i])) {
return false;
}
}
return true;
}
}
console.log(isAnagram('hello', 'hlleo'), ', should be true'); // true: correct
console.log(isAnagram('bye', 'byee'), ', should be false'); // false: correct
console.log(isAnagram('byeb', 'byee'), ', should be false'); // true: incorrect
console.log(isAnagram('byeb', 'byte'), ', should be false'); // true: incorrect
答案 3 :(得分:1)
因为你的功能会失败,所以:
isAnagram('abba', 'abbb') === false
答案 4 :(得分:1)
单个字符可以在函数中多次出现,例如比较test
和tttt
返回true。
修改函数的一种方法是每次在for循环中找到一个字符时从str2
删除字符:
function isAnagram(str1, str2){
if(str1.length !== str2.length) return false;
for(var i = 0; i < str1.length; i++){
var found = str2.indexOf(str1[i]);
if(found === -1) return false;
str2 = str2.substr(0,found) + str2.substr(found + 1)
}
return true;
}
答案 5 :(得分:1)
作为测试用例,您的代码会在此处返回成功,但违反了作为anagram的规则:
isAnagram("ooaooa", "oooooa");
它只检查是否存在相同数量的字母,以及字b中的每个字母是否出现在字b中,而不是两个字中字母的 count 。