您好我曾经使用C ++中的map解决字符串char唯一性问题。我在某个地方找到了这个解决方案,工作正常但我无法理解它是如何工作的。请一些人解释一下。
bool isUnique(string s){
int check = 0;
for(int i=0;i<s.length();++i){
if(s[i] != ' '){
int val = s[i]-'a';
if( (check & ( 1 << val)) > 0) return false;
check = check | (1 << val);
}
}
return true;
}
如果string没有重复的字符,则返回true,不包括空格,否则返回false。
答案 0 :(得分:4)
它使用int就好像它是一个位图。对于字符唯一性测试而言,位图肯定是比地图更好的数据结构。 int是粗略的,可疑的(在这种情况下)替代位图。
假设int有32位。这些位在此代码中分配给前32个字符,以小写&#39; a&#39;开头。因此大写字母和大多数特殊字符没有位位置,即使它们不是唯一的,也会被此代码视为唯一。
如果您只关心小写字母的唯一性,并且您确信代码仅用于int中至少32位的体系结构,那么这是一种不错的方法。否则,当您需要一个位数组时,请使用一些实际的位数组。