题意:给一个字符串数组,返回最大的两个字符串长度的乘积。其中这两个字符串不能有相同的字母
分析:
反反复复尝试了各种各样的方法,实在是,服气了leetcode的测试数据u,不用二进制根本过不去。那只好用二进制吧
public class Solution {
public int maxProduct(String[] words) {
int max = 0;
// Arrays.sort(words, new Comparator<String>(){
// public int compare(String a, String b){
// return b.length() - a.length();
// }
// });
int[] checker = new int[words.length];
for (int i = 0; i < checker.length; i++) {
int num = 0;
for (int j = 0; j < words[i].length(); j++) {
num = num | (1 << (words[i].charAt(j) - 'a')); //每个字母唯一确定一个左移位数
}
checker[i] = num;
}
for (int i = 0; i < words.length; i++) {
for (int j = i + 1; j < words.length; j++) {
if ((checker[i] & checker[j]) == 0) //只有同1与才不为0,每一位的1,代表有某个字母
max = Math.max(max, words[i].length() * words[j].length());
}
}
return max;
}
// private boolean haveCom(String s1, String s2){
// HashSet<Character> hs = new HashSet<>();
// char[] c1 = s1.toCharArray();
// char[] c2 = s2.toCharArray();
// for(int i=0; i<c1.length; i++){
// hs.add(c1[i]);
// }
// for(int i=0; i<c2.length; i++){
// if(hs.contains(c2[i]))
// return true;
// }
// return false;
// }
}