如何找到字符串中唯一字符的数量?

Ede*_*nia 3 c character count charactercount

我没有发现任何特别适合这个目的。

我试图找出一个函数来计算字符串中每个字符的出现次数,以便我可以在最后从长度中取出它们以找出该字符串中使用了多少同质字符。

我试过嵌套循环,第一个应用,第二个扫描字符串并有条件地满足字符,如果它没有出现在字符串的其他地方:

size_t CountUniqueCharacters(char *str)
{
    int i,j;
    char unique[CHAR_MAX];
    for(i=strlen(str); i>=0; i--)
    {
        for(j=strlen(str); j>=0; j--)
        {
            if(str[i] != unique[j])
                unique[j] = str[i];
        }
    }
    return strlen(unique);
}
Run Code Online (Sandbox Code Playgroud)

这并不奏效。

如果您愿意限制某人键入诸如"aaaaaaaaaaaaa".

Nis*_*hah 8

这是一个简单的 C++ 解决方案。该方法的复杂度为 O(n):

int countDistinct(string s) 
{ 

    unordered_map<char, int> m; 
  
    for (int i = 0; i < s.length(); i++) { 
        m[s[i]]++; 
    } 
  
    return m.size(); 
} 
Run Code Online (Sandbox Code Playgroud)


Dan*_*ein 6

这种方法很O(n^2)复杂,但在O(n).

int CountUniqueCharacters(char* str){
    int count = 0;

    for (int i = 0; i < strlen(str); i++){
         bool appears = false;
         for (int j = 0; j < i; j++){
              if (str[j] == str[i]){
                  appears = true;
                  break;
              }
         }

         if (!appears){
             count++;
         }
    }

    return count;
}
Run Code Online (Sandbox Code Playgroud)

该方法迭代字符串中的所有字符——对于每个字符,它检查该字符是否出现在任何前面的字符中。如果不是,则该字符是唯一的,并且计数递增。