318. Maximum Product of Word Lengths
2016-04-19 10:16
387 查看
Given a string array
Example 1:
Given
Return
The two words can be
Example 2:
Given
Return
The two words can be
Example 3:
Given
Return
No such pair of words.
【思路】每个字符串用int型数表示,“abc”表示0000.....0000111,两个数相与,如果为0 ,认为两个字符串没有相同字母,否则是有相同字母的。故首先将
字符串转换。
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.
【思路】每个字符串用int型数表示,“abc”表示0000.....0000111,两个数相与,如果为0 ,认为两个字符串没有相同字母,否则是有相同字母的。故首先将
字符串转换。
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 result = 0; for(int i = 0; i < n; ++i){ for(int j = i+1; j < n; ++j){ int len1 = words[i].length(); int len2 = words[j].length(); if((bits[i] & bits[j]) == 0) { result = max(result, len1*len2); } } } return result; } };
相关文章推荐
- jstl中c标签if-else
- make输出到文件
- ADB 命令
- 基于HDFS的SparkStreaming案例实战和内幕源码解析
- CentOS 6 DEPRECATED
- Apache服务器最新版下载、安装及配置
- 二叉树中和为某一值的路径
- scala奇怪的bug
- String的思考
- IOS中的NSString与NSArray的互转
- 初学opencv
- NYOJ-96 n-1位数
- AngularJS双向数据绑定
- php-fpm 信号
- 如何自动生成参考文献格式
- 前端资料大全
- Android Framework-Tools adb keyevent
- AS:Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- 图片压缩工具类
- Mysql 8个小时连接断开问题解析