题目解析
算法讲解
正常思路:使用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;}
};