【程序员面试金典】登峰造极--判定字符是否唯一

面试题 01.01. 判定字符是否唯一
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

输入: s = “leetcode”
输出: false
示例 2:

输入: s = “abc”
输出: true
限制:

0 <= len(s) <= 100
如果你不使用额外的数据结构,会很加分。
题解:
1、使用STL容器set 将原字符串中的字符依次插入最后比较set的长度是否与原字符串长度是否相同相同为true 不相同为false(关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。)

class Solution {
public:
    bool isUnique(string astr) {
       set<char> str;
       int len = astr.size();
       str.insert(astr.begin(), astr.end());
       if(str.size() == len)
       {
           return true;
       }
       return false;

    }
};

【程序员面试金典】登峰造极--判定字符是否唯一_第1张图片
2、位运算
因为只有字符,所以用一个int32位就可以记录。
一次遍历,记录之前用的那个字符,到对应的位就可以了,O(N)
将字符转换为int型数字在字符串中寻找 (1 & 1 = 1)

class Solution {
public:
    bool isUnique(string astr) {
        int bit = 0;
        for (char c: astr) {
            int index = c - 'a';
            int newBit = 1<<index;
            if ((bit & newBit) == newBit) {
                return false;
            }
            bit |= newBit;
        }
        return true;
    }
};

【程序员面试金典】登峰造极--判定字符是否唯一_第2张图片

你可能感兴趣的:(【程序员面试金典】登峰造极--判定字符是否唯一)