318. Maximum Product of Word Lengths 难度:easy
2017-01-01 20:57
381 查看
题目:
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.
思路:
思想是对于每个字符串,统计他所对应的字母出现与否,这是通过移位运算符来实现的。具体的,对于出现a,则将最右边的位数置为1,如果出现b,则将1向右移动一位,将第二位的数字置为1;然后通过或运算实现对应位置的表示,如出现了a,则最右边的位置为1;出现了c,则从右向左数第三位的数字为1;然后将每个字符串互相比较,通过位与运算符来比较,如果两个字符串没有重叠的字母,那么位与之后应该结果为0,否则为1;然后判断位数相乘的结果。
程序:
class Solution {
public:
int maxProduct(vector<string>& words) {
int len = words.size();
vector<int> num(len,0);
int res = 0;
for(int i = 0;i < len;i++)
for(int j = 0;j < words[i].size();j++)
num[i] |= (1 << (words[i][j] - 'a'));
for(int i = 0;i < len;i++)
{
for(int j = i + 1;j < len;j++)
{
if((num[i] & num[j]) == 0)
{
int temp = words[i].size() * words[j].size();
if(temp > res)
res = temp;
}
}
}
return res;
}
};
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.
思路:
思想是对于每个字符串,统计他所对应的字母出现与否,这是通过移位运算符来实现的。具体的,对于出现a,则将最右边的位数置为1,如果出现b,则将1向右移动一位,将第二位的数字置为1;然后通过或运算实现对应位置的表示,如出现了a,则最右边的位置为1;出现了c,则从右向左数第三位的数字为1;然后将每个字符串互相比较,通过位与运算符来比较,如果两个字符串没有重叠的字母,那么位与之后应该结果为0,否则为1;然后判断位数相乘的结果。
程序:
class Solution {
public:
int maxProduct(vector<string>& words) {
int len = words.size();
vector<int> num(len,0);
int res = 0;
for(int i = 0;i < len;i++)
for(int j = 0;j < words[i].size();j++)
num[i] |= (1 << (words[i][j] - 'a'));
for(int i = 0;i < len;i++)
{
for(int j = i + 1;j < len;j++)
{
if((num[i] & num[j]) == 0)
{
int temp = words[i].size() * words[j].size();
if(temp > res)
res = temp;
}
}
}
return res;
}
};
相关文章推荐
- 第二次做leetcode中的难度为easy的题-258
- 350. Intersection of Two Arrays II 难度:easy
- 27. Remove Element 难度:easy
- 198. House Robber 类别:动态规划 难度:easy
- 66. Plus One 难度:easy
- Leetcode 刷题 Binary Search Easy难度经验总结
- 292. Nim Game 难度:easy
- 118. Pascal's Triangle 难度:easy
- [leetcode]题解+经验总结 自己做法+评论区mostvotes汇总 (只包含部分easy难度)
- 453. Minimum Moves to Equal Array Elements 难度:easy
- 447. Number of Boomerangs 难度:easy
- 383. Ransom Note 难度:easy
- 461. Hamming Distance 难度:easy
- LeetCode[169. Majority Elemen] 难度[easy]
- 136. Single Number 难度:easy
- 349. Intersection of Two Arrays 难度:easy
- 448. Find All Numbers Disappeared in an Array 难度:easy
- 算法设计与分析(14)-- Valid Parentheses(难度:Easy)
- 389. Find the Difference 难度:easy
- 387. First Unique Character in a String 难度:easy