位运算基础前置知识
在深入题目之前,先回顾几个常用的位运算公式。这些是后续解题的基石,建议结合图示理解。

上面提到的几个核心公式大家可以先记下来,推导过程不必死磕,重在应用。
34. 判断字符是否唯一
题目链接: 面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)
题目描述: 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
题目示例:

解法(位图的思想)
算法思路
这道题如果允许使用额外数据结构,用哈希表很容易解决。但为了追求极致空间效率,我们可以利用【位图】思想。
假设输入只包含小写字母,那么最多只有 26 种可能。一个 int 类型变量有 32 位,足够表示所有的小写字母状态。每一位代表一个字符:
- 比特位为
0:表示该字符未出现过。 - 比特位为
1:表示该字符已出现过。
这样,我们用一个整数就能充当哈希表,空间复杂度降为 O(1)。
C++ 算法代码
class Solution {
public:
bool isUnique(string astr) {
// 如果长度超过 26,根据鸽巢原理必有重复
if (astr.size() > 26) return false;
int m = 0;
for (auto& s : astr) {
// 检查对应位是否已被置 1
if ((m >> (s - 'a')) & ) ;
m |= ( << (s - ));
}
;
}
};







