我正在尝试检查字符串中的所有字符是否唯一。以下代码不断返回true
。我怀疑除非排序列表中的前两个字符相同,否则if
条件会一直返回false
。
有人可以帮忙吗?
function checkifStringisUnique (str) {
var chars = str.split('')
var sortedChars = chars.sort()
console.log(sortedChars)
console.log(sortedChars.length)
for (i=0; i < sortedChars.length; i++) {
if (sortedChars[i] === sortedChars[i+1]) {
return false
}
return true
}
}
最佳答案
您的return true
语句在错误的位置。它应该在函数的末尾,但是您可以在for
循环的末尾找到它。
这意味着,除非排序后的字符串的前两个字符相同,否则始终会错误地返回true
。
function checkifStringisUnique (str) {
var chars = str.split('')
var sortedChars = chars.sort()
console.log(sortedChars)
console.log(sortedChars.length)
for (i=0; i < sortedChars.length; i++) {
if (sortedChars[i] === sortedChars[i+1]) {
return false
}
}
return true
}
其他一些杂项:
您应该使用分号
您应该确保声明变量,以免将其悬挂在全局范围内(例如
var i=0
vs i=0
)您应该停止在倒数第二个元素处循环,否则您将尝试访问
sortedChars
范围之外的元素考虑对很大的字符串进行排序时会发生什么,以及这将如何影响函数的运行时