每日一道算法题——判定字符是否唯一

361 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

判定字符是否唯一

示例 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
};

非常感谢帅哥美女们能看到这里,如果这个文章写得还不错或者对你有一点点帮助,求点赞求关注求分享,当然有任何问题可以在评论讨论,我会积极回答的,再次感谢