leetcode面试题 01.01. 判定字符是否唯一

本题用常规思路是很好解决的,可惜看了其它人另类的解决方法,唉,还是得学习一下人家的思路。题解尽量的详细,方便后来者观看。

题目地址

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

示例 1:

输入: s = "leetcode"

输出: false

示例 2:

输入: s = "abc"

输出: true

这是我一开始的思路。

class Solution {
public:
    bool isUnique(string astr) { //定义bool变量
        sort(astr.begin(), astr.end());//sort函数从小到大排序
        int n = astr.size();//n = astr数组长度
        for(int i = 0; i < n -1; i++){
        if(astr[i] == astr[i + 1])//比较相邻的字符
        return false;//如果相同返回false
    }
        return true;//如果不同返回true
};

这是看到的人家的思路。

class Solution {
public:
    bool isUnique(string astr) {
        int hashBit = 0;//记录字符的二进制值
        for(auto c : astr){//遍历astr数组
            int bit = 1 << (c - 'a');
            if((hashBit & bit) == bit)//按位为1表示出现,按位为0表示没出现
                return false;
            hashBit |= bit;//位或后,将字符的二进制位添加到哈希表中
        }
        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值