面试题 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;
}
};
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;
}
};