public class Solution {
public int maxProduct(String[] words) {
if(words == null || words.length == 0) return 0;
int[] signatures = new int[words.length];
for(int i = 0; i < words.length; i++){
String word = words[i];
int sig = 0;
for(int j = 0; j < word.length(); j++){
int offset = word.charAt(j) - 'a';
sig |= (1 << offset);
}
signatures[i] = sig;
}
int max = 0;
for(int i = 0; i < words.length; i++){
for(int j = i - 1; j >= 0; j--){
if((signatures[i] & signatures[j]) == 0){
max = Math.max(max, words[i].length() * words[j].length());
}
}
}
return max;
}
}