javascript - 检查字符串中的字符是否唯一

标签 javascript

我实现了我的算法来检查传入的字符串是否唯一。我觉得我的算法是正确的,但显然在某些情况下它给出了错误的结果。为什么?

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/

相关文章:

javascript - Ionic 2 应用程序冲突 "Public"与 "Public Static"

javascript - 选择选项不与 ng-model 绑定(bind)

javascript - 如何将元素定位到背景图像上的精确点?

javascript - ajax-load后广播数据从服务到多个 Controller 的变化

javascript - 查找包含字符串的数组

javascript - 没有 ng-animate 的 Angular 动画,可能吗?

javascript - Bootstrap 数据表复选框更改类

javascript - 在 Safari 上更新 ServiceWorker 而无需重新加载页面

Javascript:如何将 getComputedStyles() 生成的 css 样式设置为按钮

javascript - 引导覆盖不生效