1.题目
LeetCode: 318. 最大单词长度乘积
【medium】
2.解题
方法一:
首先将字符串数组转成整数数组,然后找出符合要求的两个字符串,即他们的与的结果为0,然后找出乘积最大的即可。
java:
class Solution {
public int maxProduct(String[] words) {
int res = 0;
int[] nums = new int[words.length];
for (int i = 0; i < words.length; i++) {
for (char c : words[i].toCharArray()) {
nums[i] |= 1 << (c - 'a');
}
}
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
if ((nums[i] & nums[j]) == 0) {
res = Math.max(res, words[i].length() * words[j].length());
}
}
}
return res;
}
}
时间复杂度:O(n + m),n是数组长度,m是字符串长度
空间复杂度:O(n)