面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)
思路:1.用哈希表(创建另一个数组存储)然后和原数组一一比对。
时间复杂度O(N) 空间复杂度 O(N)
2.位图(更优)把26个字母的信息存进一个整型的位中,0表示没出现过,1表示出现过
把用许多整型存储一个信息,改为用一个整型存储多个信息。
时间复杂度O (N) 空间复杂度O (1)
优化:(鸽巢原理)
一共有26个英文字母,所给字符串如果>26直接返回false.
class Solution
{
public:bool isUnique(string astr) {if(astr.size()>26){return false;}int bitMap = 0;for(auto ch:astr){int i = ch - 'a';//判断有无在位图中出现过(==1?)if(((bitMap>>i)&1)==1){return false;}//没有在位图中出现过,放进去(改1)。bitMap|=(1<<i);}return true;}
};