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

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

此题首先可以问一下是否为ASCII字符还是Unicode字符。
对于ASCII字符来说最多就256个字符,因此,如果大于256在false。
//自己解:

   bool isUnique(string astr) {
        map m;
        for(int i = 0;i < astr.size();i++)
        {
            if(m[astr[i]] != 0)
                return false;
            m[astr[i]]++;
        }
        return true;
    }

//金典解:

 bool isUnique(string astr) {
        if(astr.size() > 256)
            return false;
        bool ch[256] = {false};
        for(int i = 0;i < astr.size();i++)
        {
            if(ch[astr[i]])
                return false;
            ch[astr[i]] = true;
        }
        return true;
 }

时间复杂度为O(n),空间复杂度为O(1)。

//位运算

 bool isUnique(string astr) {
        if(astr.size() > 256)
            return false;
        int ch = 0;
        for(int i = 0;i < astr.size();i++)
        {
            int val = astr[i] - 'a';
            if((ch & (1 << val)))
                return false;
            ch |= 1 << val;
        }
        return true;
    }

空间减少原来的1/8;


面试题 01.01. 判定字符是否唯一_第1张图片
image.png

你可能感兴趣的:(面试题 01.01. 判定字符是否唯一)