String of unique characters - tanakakenji/Rinko GitHub Wiki
ใฆใใผใฏใชๅฐๆๅญใฉใใณๆๅญใใใชใๆๅญๅใๅน็็ใซๅฆ็ใใใใใซใ26ใใใใฎใใใใในใฏใไฝฟ็จใใใใฏใใใฏใ็ดนไปใใพใใใใฎใใฏใใใฏใฏใๆๅญใฎๅญๅจใ็ขบ่ชใใใใ2ใคใฎๆๅญๅ้ใฎๅ ฑ้ๆๅญใ่ฆใคใใใใใ้ใซ้ๅธธใซๅนๆ็ใงใใ
ใพใใๆๅญๅๅ ใฎๅๆๅญใฎๅญๅจใ็คบใใใใใในใฏใไฝๆใใพใใ
#include <iostream>
#include <string>
unsigned int createBitmask(const std::string& word) {
unsigned int mask = 0;
for (char c : word) {
if (c >= 'a' && c <= 'z') {
mask |= (1 << (c - 'a'));
}
}
return mask;
}
void printBitmask(unsigned int mask) {
for (int i = 25; i >= 0; i--) {
std::cout << ((mask & (1 << i)) ? '1' : '0');
}
std::cout << std::endl;
}
int main() {
std::string word = "abcdefz";
unsigned int mask = createBitmask(word);
std::cout << "Bitmask for \"" << word << "\": ";
printBitmask(mask);
return 0;
}
ใใฎใณใผใใฏใๆๅญๅๅ ใฎๅๅฐๆๅญใฉใใณๆๅญใซๅฏพๅฟใใใใใใ1ใซ่จญๅฎใใพใใ
ๅบๅ๏ผ
Bitmask for "abcdefz": 11111100000000000000000001
่งฃ่ชฌ๏ผ
-
1 << (c - 'a')
ใฏใใขใซใใกใใใใฎไฝ็ฝฎใซๅฏพๅฟใใใใใใ1ใซใทใใใใพใใ -
|=
ๆผ็ฎๅญใไฝฟ็จใใฆใใใฎใใใใใในใฏใซ่ฟฝๅ ใใพใใ - ็ตๆใฎใในใฏใฏใๆๅญๅๅ ใซๅญๅจใใๆๅญใซๅฏพๅฟใใใใใใ1ใซใชใฃใฆใใพใใ
2ใคใฎๆๅญๅ้ใงๅ
ฑ้ใฎๆๅญใใใใใฉใใใ็ขบ่ชใใใซใฏใใใใใใฎใใใใในใฏใซๅฏพใใฆ AND ๆผ็ฎ๏ผ&
๏ผใ่กใใพใใ
#include <iostream>
#include <string>
bool haveCommonCharacters(const std::string& word1, const std::string& word2) {
unsigned int mask1 = createBitmask(word1);
unsigned int mask2 = createBitmask(word2);
return (mask1 & mask2) > 0;
}
int main() {
std::string word1 = "hello";
std::string word2 = "world";
std::string word3 = "xyz";
std::cout << "Bitmask for \"" << word1 << "\": ";
printBitmask(createBitmask(word1));
std::cout << "Bitmask for \"" << word2 << "\": ";
printBitmask(createBitmask(word2));
std::cout << "Bitmask for \"" << word3 << "\": ";
printBitmask(createBitmask(word3));
std::cout << "\"" << word1 << "\" and \"" << word2 << "\" have common characters: "
<< (haveCommonCharacters(word1, word2) ? "Yes" : "No") << std::endl;
std::cout << "\"" << word1 << "\" and \"" << word3 << "\" have common characters: "
<< (haveCommonCharacters(word1, word3) ? "Yes" : "No") << std::endl;
return 0;
}
ๅบๅ๏ผ
Bitmask for "hello": 00000000000000100000011000
Bitmask for "world": 00000100000000100000010010
Bitmask for "xyz": 00000000000000000000000111
"hello" and "world" have common characters: Yes
"hello" and "xyz" have common characters: No
่งฃ่ชฌ๏ผ
-
haveCommonCharacters
้ขๆฐใฏใ2ใคใฎๆๅญๅใฎใใใใในใฏใ็ๆใใANDๆผ็ฎใ่กใใพใใ - ็ตๆใ0ใใๅคงใใๅ ดๅใๅ ฑ้ใฎๆๅญใๅญๅจใใใใจใๆๅณใใพใใ
- "hello" ใจ "world" ใฏ 'o' ใจ 'l' ใๅ ฑๆใใฆใใใใใANDๆผ็ฎใฎ็ตๆใฏ้ใผใญใซใชใใพใใ
- "hello" ใจ "xyz" ใฏๅ ฑ้ใฎๆๅญใๆใใชใใใใANDๆผ็ฎใฎ็ตๆใฏ0ใซใชใใพใใ
- ๅน็ๆง๏ผใใใๆผ็ฎใฏ้ๅธธใซ้ซ้ใงใใกใขใชไฝฟ็จ้ใๅฐใชใใงใใ
- ็ฐกๆฝๆง๏ผ่ค้ใชใใผใฟๆง้ ใๅฟ ่ฆใจใใใๅไธใฎๆดๆฐใงๆๅญใฎๅญๅจใ่กจ็พใงใใพใใ
- ๆ่ปๆง๏ผใใใๆผ็ฎใไฝฟ็จใใใใจใงใๆงใ ใช้ๅๆผ็ฎ๏ผๅ้ๅใ็ฉ้ๅใชใฉ๏ผใ็ฐกๅใซ่กใใพใใ
- ใใฎใใฏใใใฏใฏๅฐๆๅญใฎใฉใใณๆๅญ๏ผa-z๏ผใซใฎใฟ้ฉ็จๅฏ่ฝใงใใ
- 32ใใใใฎๆดๆฐๅใไฝฟ็จใใฆใใใใใ26ๆๅญไปฅไธใฎๆๅญใปใใใซใฏ้ฉ็จใงใใพใใใ
ใใใใในใฏใไฝฟ็จใใใใฎใใฏใใใฏใฏใใฆใใผใฏใชๅฐๆๅญใฉใใณๆๅญใใใชใๆๅญๅใๅน็็ใซๅฆ็ใใใใใฎๅผทๅใชใใผใซใงใใๆๅญใฎๅญๅจ็ขบ่ชใๆๅญๅ้ใฎๅ ฑ้ๆๅญใฎๆคๅบใชใฉใๆงใ ใชๆๅญๅๆไฝใฟในใฏใงๆดป็จใงใใพใใใใ ใใ้ฉ็จใงใใๆๅญใปใใใ้ใใใฆใใใใใไฝฟ็จใใ้ใฏใใฎๅถ้ใๅฟต้ ญใซ็ฝฎใๅฟ ่ฆใใใใพใใ