检查字符串是否包含重复字符

时间:2018-01-27 16:24:14

标签: javascript arrays string sorting

我试图检查字符串中的所有字符是否都是唯一的。以下代码不断返回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
  }
}

4 个答案:

答案 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
}

其他一些杂项:

  1. 你应该使用分号
  2. 您应该确保声明变量,以便它们不会被提升到全局范围内(例如var i=0 vs i=0
  3. 您应该停止循环使用倒数第二个元素,否则您将尝试访问范围超出sortedChars
  4. 的元素
  5. 考虑在排序非常大的字符串时将会发生什么以及它将如何影响函数的运行时间

答案 1 :(得分:0)

观察

  • return true必须在for-loop之外。

这是您使用该修补程序的代码。但是,它仍然有点不对,因为您正在与sortedChars[i + 1]进行比较{{1} }}

&#13;
&#13;
sortedChars[N + 1] = undefined
&#13;
&#13;
&#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进行比较。

&#13;
&#13;
N+1
&#13;
&#13;
&#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进行比较。

&#13;
&#13;
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;
&#13;
&#13;