这道题有多种解法,可以创建hash数组建立映射关系判断,但不用新的数据结构会加分,因此我们有“加分”办法——用位图。
我们可以创建一个整型变量(32位)而一共才26个字母,所以我们只要用到0-25位即可,0代表没有,1代表有,先判断该位是否为1,为1直接返回false,为0把该为标记为1进行下一次判断。
可优化的细节:如果字符串长度>26直接不符(鸽巢原理)
bool isunique(string astr)
{
//优化
if(astr.size()>26)
return false;
int bitmap=0;
for(auto ch:astr)
{
int i=ch-'a';//对应位图关系
if((bitmap>>i)&1==1)return false;
bitmap|=(1<<i);
}
return true;
}