我试图检查字符串中的所有字符是否都是唯一的。以下代码不断返回true
。我怀疑if
条件不断返回false
,除非排序列表中的前2个字符相同。
有人可以帮忙吗?
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
}
}
答案 0 :(得分:1)
您的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
答案 1 :(得分:0)
return true
必须在for-loop
之外。 这是您使用该修补程序的代码。但是,它仍然有点不对,因为您正在与sortedChars[i + 1]
进行比较{{1} }}
sortedChars[N + 1] = undefined
&#13;
这是一种更好的方法和更好的代码:
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++) {
console.log(sortedChars[i + 1]);
if (sortedChars[i] === sortedChars[i + 1]) {
return false
}
}
return true
}
console.log(checkifStringisUnique('elzo'));
使用for-loop
中,因为您不需要将最后一个字符与i < sortedChars.length - 1
进行比较。
N+1
&#13;
如您所见,现在您的循环没有与索引function checkifStringisUnique(str) {
var chars = str.split('')
var sortedChars = chars.sort()
console.log(sortedChars)
console.log(sortedChars.length)
for (i = 0; i < sortedChars.length - 1; i++) {
console.log(sortedChars[i + 1]);
if (sortedChars[i] === sortedChars[i + 1]) {
return false
}
}
return true
}
console.log(checkifStringisUnique('elzo'));
console.log(checkifStringisUnique('eleazar'));
进行比较。
答案 2 :(得分:0)
您可以使用单个循环和哈希表来存储找到的字符。
{{1}}
答案 3 :(得分:0)
使用Set存储唯一值&amp;将其size
与字符串&#39; s length
进行比较。
function checkifStringisUnique (str){
var st = new Set();
for(var i=0; i<str.length;i++)
st.add(str[i]);
console.log(str, "is unique: ",str.length == st.size);
}
checkifStringisUnique("abacd"); // false
checkifStringisUnique("abcd"); // true
&#13;