原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
C++代码
常规
cpp
class Solution {
public:
int countPoints(string rings) {
int count = 0;
set<string>se[10];
for(int i=1,j=0;i<rings.length();i+=2,j+=2){
se[rings[i]-'0'].insert(to_string(rings[j]));
}
for(int i=0;i<10;i++){
if(se[i].size()==3) count++;
}
return count;
}
};
Python代码
位运算
python
class Solution:
def countPoints(self, rings: str) -> int:
n,count = len(rings),0
binary_map = [0]*17 # R - B = 17
for i in range(0,n,2):
binary_map[ord(rings[i]) - ord('B')] |= 1 << (int(rings[i+1]) - int('0'))
for i in range(10):
tmp = 0
for ch in ['R','G','B']:
tmp += (binary_map[ord(ch)-ord('B')] >> i) & 1 #第i根杆 上是否有ch颜色的圈
if tmp == 3:
count += 1
return count