题目解析
算法讲解
正常思路:使用unordered_map判断并保存每一个字符出现的次数,如果当前的字符在添加到Hash之前已经出现了一次了,直接返回false,反之循环结束返回true
优化思路:可以使用位图来充当Hash表,过程中只需要判断某一位是否为1,将某一位置1的操作
小优化:因为题目上解释只有小写字母,所以如果当前的str.size() > 24 的话,说明一定有重复字符,直接return false
class Solution {
public:
bool isUnique(string str) {
if(str.size() > 24) return false;
int hash = 0;
//位图 保存每个字符串出现的次数 0:没有出现 1:出现过
for(auto ch : str)
{
int index = ch - 'a';
if((1 << index) & hash)return false;
hash |= (1 << index);
}
return true;
}
};