我实现了我的算法来检查传入的字符串是否唯一。我觉得我的算法是正确的,但显然在某些情况下它给出了错误的结果。为什么?
function isUnique(str) {
let sortedArr = str.split('').sort();
for (let [i, char] of sortedArr.entries()) {
if (char === sortedArr[i + 1]) {
return false
} else {
return true
}
}
}
console.log(isUnique('heloworld')) // true
最佳答案
return
立即终止该函数,因此如果您的 for
循环将运行,则只有第一次迭代。相反,您应该检查所有字符是否唯一(如果不是,则在循环内返回false
),否则在结束后返回true
循环:
function isUnique(str) {
let sortedArr = str.split('').sort();
for(let [i,char] of sortedArr.entries()) {
if(char === sortedArr[i + 1]) {
return false
}
}
return true
}
console.log(isUnique('heloworld'))
但是使用 Set
并查看其大小是否等于字符串的长度可能会容易得多:
function isUnique(str) {
return new Set(str).size === str.length;
}
console.log(isUnique('heloworld'))
console.log(isUnique('abc'))
查看评论,谢谢 Patrick:如果您需要考虑由多个 UCS-2 代码点(𝟙𝟚𝟛😎😜🙃
等)组成的字符,请调用字符串迭代器并检查它返回了多少项,这可以通过 spread 或 Array.from
来完成(因为否则,str.length
将无法计算出正确数量的单个字符):
function isUnique(str) {
return new Set(str).size === [...str].length;
}
console.log(isUnique('😜'));
console.log(isUnique('😜😜'));
关于javascript - 检查字符串中的字符是否唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55487722/