https://leetcode.com/problems/maximum-product-of-word-lengths/
Given a string array words
, find the maximum value of length(word[i]) * length(word[j])
where the two words do not share common letters. You may assume that each word will contain only lower case letters. If no such two words exist, return 0.
Example 1:
Given ["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]
Return 16
The two words can be "abcw", "xtfn"
.
Example 2:
Given ["a", "ab", "abc", "d", "cd", "bcd", "abcd"]
Return 4
The two words can be "ab", "cd"
.
Example 3:
Given ["a", "aa", "aaa", "aaaa"]
Return 0
No such pair of words.
class Solution { public: void strToBits(vector<int>& bits, vector<string>& words) { for(int i=0; i<words.size(); ++i) { int tmp = 0; for(int j=0; j<words[i].size(); ++j) { int offset = words[i][j] - ‘a‘; tmp = (tmp | (1 << offset)); } bits[i] = tmp; } } int maxProduct(vector<string>& words) { int n = words.size(); if(n < 2) return 0; vector<int> bits(n, 0); strToBits(bits, words); int res = 0; for(int i=0; i<n; ++i) { for(int j=i+1; j<n; ++j) { int len1 = words[i].length(), len2 = words[j].length(); if((bits[i] & bits[j]) == 0) { res = max(res, len1 * len2); } } } return res; } };
leetcode@ [318] Maximum Product of Word Lengths (Bit Manipulations)
原文:http://www.cnblogs.com/fu11211129/p/5202593.html