最大单词长度乘积 位运算 &
题目描述
给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回 0 。
示例 1:
输入:words = ["abcw","baz","foo","bar","xtfn","abcdef"]
输出:16
解释:这两个单词为 "abcw", "xtfn"。
示例 2:
输入:words = ["a","ab","abc","d","cd","bcd","abcd"]
输出:4
解释:这两个单词为 "ab", "cd"。
示例 3:
输入:words = ["a","aa","aaa","aaaa"]
输出:0
解释:不存在这样的两个单词。
解法:
1.如何快速判断两个字符串是否存在相同字母,是关键点
2.通过位运算来判断,a表示1,ab表示3,c表示4,bc表示6,a与ab中存在重复元素b,所以a&b大于0,若两个字符串所对应的二进制数相&后为0,则他们不存在重复元素
class Solution {
public int maxProduct(String[] words) {
int[] b_words=new int[words.length]; //创建新数组,存储words对应的二进制值
for(int i=0;i<words.length;i++){
int word=0;
for(int j=0;j<words[i].length();j++){
word=word|1<<(words[i].charAt(j)-'a'); //与运算
}
b_words[i]=word;
}
System.out.println(Arrays.toString(b_words));
int max_len=0;
for(int i=0;i<words.length;i++){
for(int j=0;j<words.length;j++){
if((b_words[i]&b_words[j])==0&&words[i].length()*words[j].length()>max_len){
max_len=words[i].length()*words[j].length();
}
}
}
return max_len;
}
}

浙公网安备 33010602011771号