1.题目解析
题目链接:面试题 01.01. 判定字符是否唯一
这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。
核心在于判断题目所给字符串是否存在相同字母,存在返回false即可,不存在返回true即可。
2.算法原理
利用位图思想表示字符出现状态
-
位图思想概述
位图(Bitmap)是一种利用二进制位来表示特定数据状态的数据结构。在字符统计中,我们可以利用位图的思想,将每个比特位(bit)对应一个字符,以此来记录字符是否出现过。 -
字符与比特位的映射
假设我们用一个int类型的变量来表示位图,由于int
类型通常有32位,因此足够用来表示所有小写字母(从'a'到'z',共26个)。每个比特位对应一个小写字母,如果比特位的值为0,表示该字符没有出现过;如果值为1,表示该字符出现过。 -
实现字符哈希表
利用这种映射关系,我们可以将一个int
类型的变量视作一个简单的哈希表,用于快速判断某个字符是否出现过。这种方法比传统的哈希表更加紧凑,因为它只使用了固定数量的内存(一个int
的大小),且无需动态分配内存。
3.代码实现
class Solution
{
public:
bool isUnique(string astr)
{
int size = astr.size();
if(size > 26)
return false;
for(int i = 0, flg = 0; i < size; i++)
{
if((flg >> (astr[i] - 'a')) & 1)
return false;
//flg = (flg >> (astr[i] - 'a')) | 1;
flg |= (1 << (astr[i] - 'a'));
}
return true;
}
};
写在最后
嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。
觉得有点收获的话,不妨给我点个赞吧!
如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~