题目描述:给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。
输入: ["abcw","baz","foo","bar","xtfn","abcdef"]
输出: 16
解释: 这两个单词为 "abcw", "xtfn"。
可以用位运算来做,假如两个字符串包含公共字母,二进制与的结果一定不是0
//获得字符串二进制
for(int i=0;i<str.length();i++){
num|=1<<a.charAt(i)-'a';
}
完整代码
public class Main {
public static void main(String[] args) {
String[] s = new String[]{"abcw","baz","foo","bar","xtfn","abcdef"};
System.out.println(new Main().maxProduct(s));
}
public int maxProduct(String[] words) {
int wordslen = words.length;
//存每个字符串的二进制数
int[] num = new int[wordslen];
//存最大乘积数
int ans = 0;
for(int i=0;i<wordslen;i++){
int len = words[i].length();
for(int j=0;j<len;j++){
num[i]|=1<<(words[i].charAt(j)-'a');
}
}
for(int i=0;i<wordslen;i++){
for(int j=i+1;j<wordslen;j++){
//无公共字母
if((num[i]&num[j])==0){
ans = Math.max(ans,words[i].length()*words[j].length());
}
}
}
return ans;
}
}