在做题中学习(35):判断字符是否唯一

面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)在做题中学习(35):判断字符是否唯一_第1张图片

思路:1.用哈希表(创建另一个数组存储)然后和原数组一一比对。

时间复杂度O(N) 空间复杂度 O(N)

2.位图(更优)把26个字母的信息存进一个整型的位中,0表示没出现过,1表示出现过

把用许多整型存储一个信息,改为用一个整型存储多个信息。

时间复杂度O (N)     空间复杂度O (1)

优化:(鸽巢原理)

 一共有26个英文字母,所给字符串如果>26直接返回false.

在做题中学习(35):判断字符是否唯一_第2张图片

class Solution 
{
public:
    bool isUnique(string astr) 
    {
        if(astr.size()>26)
        {
            return false;
        }
        int bitMap = 0;
        for(auto ch:astr)
        {
            int i = ch - 'a';
            //判断有无在位图中出现过(==1?)
            if(((bitMap>>i)&1)==1)
            {
                return false;
            }
            //没有在位图中出现过,放进去(改1)。
            bitMap|=(1<

你可能感兴趣的:(学习,c++,位运算,算法)