
求解代码
java
public int maxProduct(String[] words) {
int n = words.length;
int[] masks = new int[n];
int[] lens = new int[n];
for (int i = 0; i < n; i++) {
lens[i] = words[i].length();
for (char c : words[i].toCharArray()) {
masks[i] |= 1 << (c - 'a');
}
}
int max = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if ((masks[i] & masks[j]) == 0) {
max = Math.max(max, lens[i] * lens[j]);
}
}
}
return max;
}
小贴士
遍历每个字符串,用一个 int 整数(掩码)表示该字符串包含的字符。
解释一下:
如果二进制第c-'a'位为 1,则表示包含字符c。
比如包含a则第 0 位为 1,包含b则第 1 位为 1。