有人可以解释这个程序来检查字符串c ++中的唯一字符

时间:2015-07-10 12:59:46

标签: c++

您好我曾经使用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。

1 个答案:

答案 0 :(得分:4)

它使用int就好像它是一个位图。对于字符唯一性测试而言,位图肯定是比地图更好的数据结构。 int是粗略的,可疑的(在这种情况下)替代位图。

假设int有32位。这些位在此代码中分配给前32个字符,以小写&#39; a&#39;开头。因此大写字母和大多数特殊字符没有位位置,即使它们不是唯一的,也会被此代码视为唯一。

如果您只关心小写字母的唯一性,并且您确信代码仅用于int中至少32位的体系结构,那么这是一种不错的方法。否则,当您需要一个位数组时,请使用一些实际的位数组。