318. Maximum Product of Word Lengths
2016-04-23 11:19
369 查看
Problem
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.
Solution
在本题中,我们只需要关注有哪些字母,而不需要关心每个字母出现的次数。一个int型整数有32位,但是小写字母一共只有26个,所以我们可以使用一个整数的低26位来表示一个字符串中都含有哪些字母。从低位到高位,如果该位是1,表示该字符串中有该字母,否则表示没有该子母。
注意运算符的优先级,==要比&高,所以注意加括号
class Solution { public: int maxProduct(vector<string>& words) { if(words.empty()) return 0; int ret = 0; int len = words.size(); vector<int> wordsTable(len,0); for(int i = 0;i<len;++i) { string tmp = words[i]; for(int j = 0;j<tmp.size();++j) wordsTable[i] |= 1 << (tmp[j] - 'a'); } for(int i = 0;i<len;++i) for(int j = i+1;j<len;++j) { if((wordsTable[i]&wordsTable[j]) == 0&& (words[i].size()*words[j].size() > ret)) ret = words[i].size()*words[j].size(); } return ret; } };
相关文章推荐
- as、as!、as?三种类型转换操作符使用详解
- Twisted源码分析2
- EhCache 分布式缓存/缓存集群
- Spring In Action
- GridBagLayout 布局精髓
- 自定义View-2-重写onMeasure
- 自定义View-1-动态添加view
- 机器学习------平台和语言选择
- Android前端人员与后台开发的撕逼(一)
- rsync常见错误总结
- POJ 1328 Radar Installation 题解
- 欢迎使用CSDN-markdown编辑器
- [从头学数学] 第191节 空间向量与立体几何
- jQuery Easing 使用方法及其图解
- 自定义View-序言-你需要的知识点
- 【.net深呼吸】非 Web 项目使用缓存
- IOS-HTTP协议
- Ubuntu14.04中文版调出五笔输入法关键步骤
- scatter_matrix&df.plot&sns.boxplot
- iOS之UIView的动画