Я пытаюсь найти, есть ли в конкретной строке все уникальные символы или нет.Мой подход такой: я инициализирую 64-битную переменную, скажем мест и устанавливаю ее равной 0. Теперь я перебираю строку и вычисляю разницу междуASCII между текущим символом и 'A' (наименьший возможный ASCII).Если (place & (1 "<<" pos)) уже установлено, строка не имеет уникальных символов.</p>
Все отлично работает, но только со строчными буквами.В тот момент, когда я добавляю тест с заглавными буквами, код больше не работает.Я уверен, что это что-то с моей переменной мест , но я не знаю, что именно не так.
Вот код для того же:
#include <bits/stdc++.h>
using namespace std;
void check_unique(string s){
int64_t places=0;
for(int i=0;i<s.length();i++){
int pos=s[i]-'A';
if((places & (1<<pos))!=0){
cout<<"String does not have all unique characters\n";
return;
}
places|=(1<<pos);
}
cout<<"String has all unique characters\n";
}
int main() {
check_unique("abcde"); // Testcase 1
check_unique("aabb"); // Testcase 2
check_unique("ABbde"); // Testcase 3, Wrong output.
return 0;
}