小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
判定字符是否唯一
示例 1:
输入: s = "leet code" 输出: false 示例 2: 输入: s = "abc" 输出: true
限制:
<1>
0 <= len(s) <= 100
<2>
如果你不使用额外的数据结构,会很加分。
解法1 遍历字符串 判断字符出现位置
内存消耗 37.5MB
/**
* @param {string} astr
* @return {boolean}
*/
var isUnique = function(astr) {
// 执行用时 60ms
// 第一个indexOf 尝试获取指定字符第二次出现位置
// 第二个indexOf 获取指定字符第一次出现的位置
//for(let i=0;i<=astr.length;i++){
//if(astr.indexOf(astr[i], astr.indexOf(astr[i])+1)!=-1){
// return false
//}
//}
// 执行用时 64ms
// 判断第一次和最后一次出现的位置是否相同
for (let i of astr) {
if (astr.indexOf(i) !== astr.lastIndexOf(i)) {
return false
}
}
return true
};
解法2 利用es6中的 Set
Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
特殊值
- +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
- undefined 与 undefined 是恒等的,所以不重复;
- NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。
结果
执行用时 80ms
内存消耗 37.5MB
/**
* @param {string} astr
* @return {boolean}
*/
var isUnique = function(astr) {
return new Set([...astr]).size === astr.length
};
非常感谢帅哥美女们能看到这里,如果这个文章写得还不错或者对你有一点点帮助,求点赞,求关注,求分享,当然有任何问题可以在评论讨论,我会积极回答的,再次感谢