这道题有多种解法,可以创建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;
}