
判断字符是否唯一
题目描述: 给定一个字符串,判断其中所有字符是否都是唯一的。没有使用额外的数据结构。

解题思路
这道题的核心在于利用【位图】的思想。既然只涉及小写字母,我们可以用一个整数类型的变量来充当哈希表。一个 int 类型有 32 位,足够表示所有的小写字母(26 个)。
具体做法是:每一个比特位代表一个字符。如果某一位是 0,说明该字符还没出现过;如果是 1,说明已经出现过了。遍历字符串时,检查对应位的状态即可。
这里有个细节要注意:如果字符串长度超过 26,根据鸽巢原理,必然存在重复字符,可以直接返回 false。
C++ 代码实现
class Solution {
public:
bool isUnique(string astr) {
// 超过 26 个字符必然有重复
if (astr.size() > 26) return false;
int mask = 0;
for (auto& c : astr) {
int val = c - 'a';
// 检查第 val 位是否为 1
if ((mask >> val) & 1) return false;
// 将第 val 位设为 1
mask |= (1 << val);
}
return true;
}
};





