我正在尝试检查字符串中的所有字符是否唯一。以下代码不断返回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范围之外的元素
考虑对很大的字符串进行排序时会发生什么,以及这将如何影响函数的运行时

10-06 07:05