gpt4 book ai didi

javascript - 如何跳过两个相同数组索引之间的比较?

转载 作者:行者123 更新时间:2023-11-30 09:30:21 27 4
gpt4 key购买 nike

我正在做这个非常简单的 codewars kata 下面是问题所在:

An isogram is a word that has no repeating letters, consecutive or non-consecutive. Implement a function that determines whether a string that contains only letters is an isogram. Assume the empty string is an isogram. Ignore letter case.

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。但对我来说不幸的是,当将数组与自身进行比较时,它会将数组中的每个字母与自身进行比较,所以基本上即使数组中只有该字符的一个字母,因为它再次与自身进行比较,它将返回虚假陈述。

这个问题让我很苦恼。

最佳答案

检查 Array#lastIndexOf (它从末尾搜索)与当前索引相同。如果不是,则它不是唯一的:

function isIsogram(str){
var letter = str.toLowerCase().split("");

for(var i = 0; i < letter.length; i++) {
if(letter.lastIndexOf(letter[i]) !== i){
return false;
}
}
return true;
}

console.log(isIsogram('subdermatoglyphic'));
console.log(isIsogram('rare'));

更好的解决方案是使用 Set 来比较唯一字符的数量与原始字符串中的字符数:

const isIsogram = (str) => new Set(str.toLowerCase()).size === str.length;

console.log(isIsogram('subdermatoglyphic'));
console.log(isIsogram('rare'));

关于javascript - 如何跳过两个相同数组索引之间的比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46655421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com