class Solution {
public int maxProduct(String[] words) {
int length = words.length;
int[] masks = new int[length];
//位掩码的最低26位分别表示每个字母是否在这个单词中出现
for (int i = 0; i < length; i++) {
String word = words[i];
int wordLength = word.length();
for (int j = 0; j < wordLength; j++) {
masks[i] |= 1 << (word.charAt(j) - 'a');
}
}
int maxProd=0;
for (int i = 0; i < length; i++) {
for (int j = i + 1; j < length; j++) {
if ((masks[i] & masks[j]) == 0) {
maxProd = Math.max(maxProd, words[i].length() * words[j].length());
}
}
}
return maxProd;
}
}
1、通过位运算操作判断两个单词是否有公共字母
只包含小写字母,共有 26 个小写字母,因此可以使用位掩码的最低 26 位分别表示每个字母是否在这个单词中出现。
masks[i] |= 1 << (word.charAt(j) - 'a');
判断第 i 个单词和第 j 个单词是否有公共字母可以通过判断 masks[i] & masks[j]是否等于 0 实现,