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
Return
The two words can be
["abcw", "baz", "foo", "bar", "xtfn", "abcdef"]
Return
16
The two words can be
"abcw", "xtfn"
.
Example 2:
Given
Return
The two words can be
["a", "ab", "abc", "d", "cd", "bcd", "abcd"]
Return
4
The two words can be
"ab", "cd"
.
Example 3:
Given
Return
No such pair of words.
["a", "aa", "aaa", "aaaa"]
Return
0
No such pair of words.
Solution:
Use bit manipulation to speed up. When char string appears in a question and is asked to do something related to check whether identical string, most likely you need to use bit manipulation.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
int maxProduct(vector<string>& words) { | |
vector<int> digits(words.size()); | |
for(int i=0; i<words.size(); i++){ | |
int d=0; | |
string word=words[i]; | |
for(int j=0; j<word.length(); j++){ | |
int c=word[j]-'a'; | |
d = d|(1<<c); | |
} | |
digits[i]=d; | |
} | |
int maxv=0; | |
for(int i=0; i<words.size(); i++){ | |
for(int j=i+1; j<words.size(); j++){ | |
if((digits[i]&digits[j])==0){ | |
maxv=max(maxv, int(words[i].length()*words[j].length())); | |
} | |
} | |
} | |
return maxv; | |
} | |
}; |
No comments:
Post a Comment