vector<string> words= {"abcw","asd","awgf","dggg"}
for (int i = 0; i < n; ++i) {
for (char ch : words[i]) {
mask[i] |= 1 << (ch - 'a');
}
}
给定string “abcf”
初始:mask: 00000000
(一)对于字符 'a',计算 (ch - 'a')
的值为 0,然后将 1 << 0
左移0位得到1。然后进行按位或操作:mask |= 1 << 0
,得到: mask: 00000001
(二)对于字符 'b',计算 (ch - 'a')
的值为 1,然后将 1 << 1
左移1位得到2。然后进行按位或操作:mask |= 1 << 1
,得到: mask: 00000011
(三)对于字符 'c',计算 (ch - 'a')
的值为 2,然后将 1 << 2
左移2位得到4。然后进行按位或操作:mask |= 1 << 2
,得到: mask: 00000111
(四)对于字符 'a',计算 (ch - 'a')
的值为 0,然后将 1 << 0
左移0位得到1。由于当前的 mask
已经有第0位为1了,所以不会改变: mask: 00000111
(五) 对于字符 'f',计算 (ch - 'a')
的值为 5,然后将 1 << 5
左移5位得到32。然后进行按位或操作:mask |= 1 << 5
,得到: mask: 00100111
对于两个不同string的mask
if(mask[i] & mask[j] == 0) //没有共同的字母
标签:字符,ch,运算,相同,左移,mask,然后,按位,元素 From: https://www.cnblogs.com/zhangdudu/p/18004959