题目
给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
提示:题目大致意思就是求两个不包含公共字符的字符串最大乘积,题目限制了words[i] 仅包含小写字母
思路
提示:没想到的是,这个题目用位运算可以解决,所以记录一下,它可以建立一个int32位数据类型的结构来存储每个字母出现的情况,每一位对应一个字母的出现情况,然后共26个小写字母,所以说是足够的,然后同理对每一个字符串都这样处理,比较的时候只需要比较他们的字母出现情况就可以知道是否存在公共字母了。
二、代码
public int maxProduct(String[] words) {
int[] strbit = new int[words.length];
for(int i=0;i<words.length;i++){
for(char ch:words[i].toCharArray()){
strbit[i]|=1<<(ch-'a');
}
}
int ans =0;
for(int i=0;i<words.length;i++){
for(int j=i+1;j<words.length;j++){
if((strbit[i]&strbit[j])==0){
ans = Math.max(ans,words[i].length()*words[j].length());
}
}
}
return ans;
}