位运算存储包含的单词和判断是否有重复单词
class Solution {
public int maxProduct(String[] words) {
//用二进制的方法存储每一个子字符串所包含的所有字母
int[] mask = new int[words.length];
int index = 0;
for (String word : words) {
int t = 0;
for(int i = 0; i < word.length();i++){
//这个是计算相对于a的偏移量,相当于把每一个字母都转换成0 - 25 的数字
int u = word.charAt(i) - 'a';
// 1 << u 是将 1 向左移u为,例如 1 << 1 = 10 = 2, t 与 该数字做或运算就相当于将该位置变为1
t |= 1 << u;
}
mask[index++] = t;
}
//遍历
int max = 0;
for(int i = 0; i < words.length; i++){
for(int j = i + 1; j < words.length; j++){
//进行与运算,如果有相同字母那么就不是0,都不相同才为0
if ((mask[i] & mask[j]) == 0)
max = Math.max(words[i].length() * words[j].length(),max);
}
}
return max;
}
}