题目描述
面试题 01.01. 判定字符是否唯一https://leetcode.cn/problems/is-unique-lcci/
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
示例 1:
输入: s = "leetcode"
输出: false
示例 2:输入: s = "abc"
输出: true
限制:0 <= len(s) <= 100
s[i]仅包含小写字母
如果你不使用额外的数据结构,会很加分。来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/is-unique-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目分析
这题其实不难,很容易想到用哈希表来做。但题目说不用额外的数据结构(其实就是在暗示不用哈希表)的情况会很加分。所以这里是想介绍一下用位运算的形式来模拟,即相当于将原来26大小的哈希数组压缩到二进制位上操作。因为题目说明只有小写字母,所以完全可以这样做。
这里想介绍的思路就是,当我们需要存储的信息只是单一的true/false的时候,如果数据量不是很大,我们大可以用位运算的方式将原来很大的一个数据结构进行压缩。这是一个很巧妙的思路。
我的题解
bool isUnique(char* astr)
{
//位运算来解,相当于将原来26大小的哈希数组压缩到二进制位上操作。
int jud = 0;
int len = strlen(astr);
for(int i = 0; i < len; i++)
{
int posi = astr[i] - 'a';
if((jud & 1 << posi) != 0)
return false;
jud |= 1 << posi;
}
return true;
}