簡體   English   中英

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

[英]Check for characters in a string being unique

我實現了我的算法來檢查傳入的字符串是否唯一。 我覺得我的算法是正確的,但顯然在某些情況下它會給出錯誤的結果。 為什么?

 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循環。 相反,您應檢查所有字符是否唯一(如果不是,在循環內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可能會容易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來完成Array.from (因為否則, str.length將不會評估為正確的單個字符數):

 function isUnique(str) { return new Set(str).size === [...str].length; } console.log(isUnique('😜')); console.log(isUnique('😜😜')); 

只運行for循環中的第一次迭代(因為你總是執行'return')。 相反,您可以使用以下代碼

 function isUnique(str, t={}) { return ![...str].some(c=> t[c]=c in t) } console.log('heloworld =>',isUnique('heloworld')); console.log('helo =>',isUnique('helo')); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM