剑指offer2 P10.
class Solution {
public int maxProduct(String[] words) {
int[] flags = new int[words.length]; //每个单词设置一个int数字,二进制位记录字符是否出现的情况
for(int i = 0; i < words.length; i++){
for(char ch: words[i].toCharArray()){ //处理每个单词的字符
flags[i] |= 1 << (ch - 'a'); //1左移 (ch - 'a')位,再与flags[i] 相或赋值给flags[i]
// 即将flags[i]的从右往左数第ch-'a'位标记为1.
}
}
int result = 0;
for(int i = 0; i < words.length; i++){ //从第一个单词开始依次向后两两比较
for(int j = i+1; j < words.length; j++){
if((flags[i] & flags[j]) == 0){ //比较两个单词的二进制位的情况,如果完全不同,则相 & 为0,符合题意
int prod = words[i].length()*words[j].length();
result = Math.max(prod, result); //重置result;
}
}
}
return result;
}
}