【发布时间】:2017-10-09 21:43:36
【问题描述】:
我正在做这个非常简单的codewars kata 下面是问题:
等值线是一个没有重复字母、连续或 非连续的。实现一个判断字符串是否为 只包含字母的是等值线。假设空字符串是 等值线。忽略字母大小写。
function isIsogram(str){
var letter = str.toLowerCase().split("");
for(var i = 0; i < letter.length; i++) {
if(letter.indexOf(letter[i].toLowerCase()) > -1){
return false;
}
}
return true;
}
我的解决方案总是返回 false,因为我在 indexOf 中的数组比较了我的字符串中的每个字母。该解决方案应该将数组与自身进行比较,如果没有重复的字母则返回 true。但不幸的是,当我将数组与自身进行比较时,它将比较数组中的每个字母,所以基本上即使数组中只有一个字符的字母,因为它再次与自身进行比较,它将返回一个错误的陈述。
这个问题要了我的命。
【问题讨论】:
-
在您的 if 语句中,您能否添加类似
&& letter.indexOf(letter[i].toLowerCase()) !== i的内容? -
您最好先对字符串进行排序,然后遍历它并将当前字母与下一个字母进行比较。您的算法被认为很慢。
标签: javascript html css arrays data-structures