Функция принимает массив с буквами. Количество букв, которые не повторяются, должно быть возвращено

Функция принимает массив с буквами. Количество букв, которые не повторяются, должно быть возвращено. То есть они встречаются только в массиве 1 раз. Использовать нужно меньше дополнительной памяти для решения. Без дополнительных массивов.Теперь я показываю и увеличиваю счетчик каждый раз, когда буквы не совпадают. И я не могу придумать, как сделать это, чтобы функция правильно работает

int  isCharacterUnique(const char* str) 
{
   const  int size = strlen(str);
   int count = 0;

   for (int index = 0; index < size; ++index)
   {
       for (int j = index + 1; j < size; ++j) 
       {
        
          if (str[index] != str[j]) 
          {
            count += 1;
          }     
       } 
   }      
   return count;
 }

В main записую так

 const char* str = "abcacwqa";
 std::cout << "isCharacterUnique: " << isCharacterUnique(str);

В консоле : isCharacterUnique: 24


Ответы (3 шт):

Автор решения: Harry

Например, так:

int isCharacterUnique(const char* str)
{
    int cnt[256] = {0};
    for(const char* s = str; *s; ++s) cnt[(unsigned char)*s]++;
    for(int i = 1; i <= 255; ++i) if (cnt[i]==1) cnt[0]++;
    return cnt[0];
}
→ Ссылка
Автор решения: sibedir

Вариант для мегамозгов )))

int isCharacterUnique(const char* str)
{
    int res = 0;
    char flags[256]{};
    for (auto p = (unsigned char*)str; *p; ++p) {
        switch (flags[*p]) {
        case 0:
            flags[*p] = 1;
            ++res;
            continue;
        case 1:
            flags[*p] = 2;
            --res;
        }
    }
    return res;
}
→ Ссылка
Автор решения: MBo

Если память экономить (ценой быстродействия), то на основе вашего решения можно сделать так: (проверка)

int  isCharacterUnique(const char* str)  {
   int result = 0;
   int size = strlen(str);
   for (int index = 0; index < size; ++index) {
       int count = 0;
       for (int j = 0; j < size; ++j)   {
          if (str[index] == str[j]) 
             count++;
       } 
       if (count == 1)
          result++;
   }      
   return result;
 }
→ Ссылка