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

时间:2019-04-03 05:35:21

标签: 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

2 个答案:

答案 0 :(得分:25)

$('.menu-box').click(e => { let id = e.target.data('menu-listing'); // first remove the class from all items $('.menu-preview-items').removeClass('.active'); // now add back the active class for the item we care about $(`#${id}`).addClass('.active'); }); 立即终止该函数,因此只有return循环可以运行时才进行第一次迭代。相反,您应该检查所有字符是否唯一(如果不是,则在循环内为for),否则为return false在循环结束后:

return 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

请查看评论,谢谢Patrick:如果您需要考虑由多个UCS-2代码点(function isUnique(str) { return new Set(str).size === str.length; } console.log(isUnique('heloworld')) console.log(isUnique('abc'))等)组成的字符,请调用字符串迭代器并检查返回的项目数,可以使用扩展名或(否则,Array.from的计算结果将无法达到正确的单个字符数):

str.length

答案 1 :(得分:0)

仅运行for循环中的第一次迭代(因为您始终执行“返回”)。相反,您可以使用以下代码

function isUnique(str, t={}) 
{  
  return ![...str].some(c=> t[c]=c in t)
}

console.log('heloworld =>',isUnique('heloworld'));
console.log('helo      =>',isUnique('helo'));