LeetCode 面试题 - 判定字符是否唯一(简单)

题目

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

        输入: s = "leetcode"
        输出: false 


示例 2:

        输入: s = "abc"
        输出: true


限制:

  • 0 <= len(s) <= 100 
  • s[i]仅包含小写字母
  • 如果你不使用额外的数据结构,会很加分。

代码

/**
 * @param {string} astr
 * @return {boolean}
 */
var isUnique = function(astr) {
    for (var i = 0; i < astr.length; i++) {
        for (var j = i + 1; j < astr.length; j++) {
            if (astr[i] === astr[j]) {
                return false;
            }
        }
    }
    return true;
};

        算法思路:遍历字符串中的每个字符,然后对于每个字符,再次遍历剩余的字符,检查是否存在相同的字符。如果找到了相同的字符,则返回false,否则返回true。

遇到的问题

  • param 参数
  • astr.length 没有括号
  • 是astr[i] ===astr[j] ,不是 i === j(字符串中的两个字符进行比较,应该用数组的形式;i 和 j 只是单纯的数字,无法单独代表字符)
  • 相等是三等号 ===

解法2

/**
 * @param {string} astr
 * @return {boolean}
 */
var isUnique = function (astr) {
  return new Set([...astr]).size === astr.length
};

        算法思路:[...astr] 将字符串转换为字符数组;new Set([...astr]) 通过Set数据结构将字符数组转换为一个集合,集合的特性是不包含重复元素。如果集合的大小和字符串的长度相同(说明每个字符都不同),则返回true,否则返回false。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值