LeetCode 1255 得分最高的单词集合状态压缩 位运算HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1255 得分最高的单词集合状态压缩 位运算HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
一道非常好理解的题目,关键点在于用到的方法。题目就是在给定的单词集合和字母集合下,能够组成得分最高的单词子集的得分,本质上就是遍历所有的单词子集,判断子集中的单词能否由字母集合构成,然后计算得分,返回最大得分。这里在遍历集合的时候用到位运算,来判断当前位置单词是否在当前子集内,步骤如下:
- 统计字母表所有字母个数;
- 遍历每个集合,遍历每个单词,判断单词是否在集合内;
- 计算当前集合内所有单词的得分,字母无法构成的单词跳过;
- 更新得分;
- 返回最大得分。
代码如下:
class Solution
public:
int maxScoreWords(vector<string>& words, vector<char>& letters, vector<int>& score)
int n = words.size(), res = 0;
vector<int> count(26);
for(auto& c : letters)
count[c - 'a'] ++;
// 遍历所有子集
for(int i = 1; i < (1 << n); i ++)
// 记录子集的字母
vector<int> curCount(26);
// 遍历每一个单词
for(int j = 0; j < n; j ++)
// 判断单词是否在子集里
if((i & (1 << j)) == 0)
continue;
for(auto& c : words[j])
curCount[c - 'a'] ++;
bool flag = true;
int sum = 0;
for(int j = 0; j < 26; j ++)
sum += score[j] * curCount[j];
flag = (curCount[j] <= count[j]);
if(!flag)
break;
if(flag)
res = max(res, sum);
return res;
;
以上是关于LeetCode 1255 得分最高的单词集合状态压缩 位运算HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 5258. 得分最高的单词集合 Maximum Score Words Formed by Letters
[leetcode] 798 得分最高的最小轮调 - 思维dp