Problem : https://leetcode.com/problems/maximum-product-of-word-lengths/
Calculate hash key base on the letters. Then wordA and wordB have common letter if keyA & keyB != 0
Time Complexity = O ( N ** 2 )
class Solution {
public int maxProduct(String[] words) {
final int[] keys = Arrays.stream(words)
.mapToInt(this::keyOf)
.toArray();
return IntStream.range(0, words.length)
.map(i -> maxProductStartsWithWord(i, words, keys))
.max()
.orElse(0);
}
int maxProductStartsWithWord(int i, String[] words, int[] keys) {
return IntStream.range(i+1, words.length)
.filter(j -> (keys[i] & keys[j]) == 0)
.map(j -> words[i].length() * words[j].length())
.max()
.orElse(0);
}
int keyOf(String word) {
return word.chars()
.reduce(0, (key, w) -> key | (1 << (w - 'a')));
}
}
Edited on 05/31/2022. Replace with Java functional programming style solution.
No comments:
Post a Comment