位运算找是否有相同元素
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) //没有共同的字母

浙公网安备 33010602011771号