位运算找是否有相同元素

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)  //没有共同的字母

  

 

posted @ 2024-02-03 17:06  zhangdudu  阅读(16)  评论(0)    收藏  举报