LeetCode 1255 得分最高的单词集合 Maximum Score Words Formed by Letters
2024-09-06 08:40:44
地址 https://leetcode-cn.com/problems/maximum-score-words-formed-by-letters/
题目描述
你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score。
请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由 letters 里的字母拼写出的 任意 属于 words 单词子集中,分数最高的单词集合的得分。
单词拼写游戏的规则概述如下:
玩家需要用字母表 letters 里的字母来拼写单词表 words 中的单词。
可以只使用字母表 letters 中的部分字母,但是每个字母最多被使用一次。
单词表 words 中每个单词只能计分(使用)一次。
根据字母得分情况表score,字母 ‘a’, ‘b’, ‘c’, … , ‘z’ 对应的得分分别为 score[0], score[1], …, score[25]。
本场游戏的「得分」是指:玩家所拼写出的单词集合里包含的所有字母的得分之和。
样例
示例 : 输入:words = ["dog","cat","dad","good"], letters = ["a","a","c","d","d","d","g","o","o"],
score = [,,,,,,,,,,,,,,,,,,,,,,,,,]
输出:
解释:
字母得分为 a=, c=, d=, g=, o=
使用给定的字母表 letters,我们可以拼写单词 "dad" (++)和 "good" (+++),得分为 。
而单词 "dad" 和 "dog" 只能得到 分。
示例 : 输入:words = ["xxxz","ax","bx","cx"], letters = ["z","a","b","c","x","x","x"],
score = [,,,,,,,,,,,,,,,,,,,,,,,,,]
输出:
解释:
字母得分为 a=, b=, c=, x=, z=
使用给定的字母表 letters,我们可以组成单词 "ax" (+), "bx" (+) 和 "cx" (+) ,总得分为 。
单词 "xxxz" 的得分仅为 。
示例 : 输入:words = ["leetcode"], letters = ["l","e","t","c","o","d"],
score = [,,,,,,,,,,,,,,,,,,,,,,,,,]
输出:
解释:
字母 "e" 在字母表 letters 中只出现了一次,所以无法组成单词表 words 中的单词。
提示: <= words.length <=
<= words[i].length <=
<= letters.length <=
letters[i].length ==
score.length ==
<= score[i] <=
words[i] 和 letters[i] 只包含小写的英文字母。
算法1
(暴力枚举)
DFS 暴力枚举 是的 就是暴力
也许出题人是想做动态规划?? 然后降低了数据量么?
class Solution {
public: int ret = ;
void transferToArr(const vector<string>& words, vector<vector<int>>& wordsArr,
const vector<char>& letters, vector<int>& lettersArr)
{
for (int i = ; i < words.size(); i++) {
vector<int> tmp();
for (int j = ; j < words[i].size(); j++) {
int idx = words[i][j] - 'a';
tmp[idx]++;
}
wordsArr.push_back(tmp);
} for (int i = ; i < letters.size(); i++) {
int idx = letters[i] - 'a';
lettersArr[idx]++;
}
} int SelectWord(vector<int> wordCount, vector<int>& lettersArr, vector<int>& score)
{
int retScore = ;
for (int i = ; i < wordCount.size(); i++) {
if (wordCount[i] != ) {
if (wordCount[i] > lettersArr[i])
return ;
lettersArr[i] -= wordCount[i];
retScore += score[i] * wordCount[i];
}
} return retScore;
} void DFS(vector<vector<int>>& wordsArr, int idx, vector<int> lettersArr, int currScore, vector<int>& score)
{
if (idx >= wordsArr.size()) {
ret = max(ret, currScore);
return;
} vector<int> copyLettersArr = lettersArr;
int addscore = SelectWord(wordsArr[idx], lettersArr, score);
if (addscore != )
DFS(wordsArr, idx+, lettersArr, currScore + addscore, score);
//这里尝试的是不放入该单词的组合
DFS(wordsArr, idx + , copyLettersArr, currScore, score);
} int maxScoreWords(vector<string>& words, vector<char>& letters, vector<int>& score) { vector<vector<int>> wordsArr;
vector<int> lettersArr();
//将提出给出的变量 转化成字符索引 多少个字符为值得数组
transferToArr(words, wordsArr, letters, lettersArr);
DFS(wordsArr, , lettersArr, , score);
return ret;
} };
最新文章
- CephRGW 在多个RGW负载均衡场景下,RGW 大文件并发分片上传功能验证
- C++对象模型详解
- LightOJ1025 The Specials Menu(区间DP)
- (26)odoo中的序列运用
- flask开发框架
- arduino扩展IO与M74HC595B芯片的使用,挪车电话提示牌的设计
- 第五章 MySQL函数
- angular笔记_8(事件)
- switch语句判断学生成绩
- ASP.NET MVC:WebPageRenderingBase.cs
- SVM 推到期间 遇到的 表背景知识 (间隔最大化)
- Scala_Trait特征
- 完整的POM文档内容
- 黄聪:WordPress 多站点建站教程(一):怎样开启WordPress多站点功能,实现手机移动端主题开发,与主站用户数据共享
- mac os、linux及unix之间的关系
- 10分钟让你的站点也支持Markdown
- WPF 自定义绕圈进度条(转)
- css实现下拉菜单功能(多中实现方式即原理)
- iOS 展示 gif
- Linux内存使用消耗高
热门文章
- IDEA中使用Maven模板创建Servelet项目并使用Tomcat来运行项目
- Java中";或";运算与";与";运算快慢的三三两两
- ABAP分享五 ALV修改单元格并将修改数据更新到数据表中示例1
- 更改Android studio中SDK,AVD的默认路径
- JSP的介绍
- sql server一些快捷方式和操作技巧
- Pro Micro
- 小程序-picker组件选择数量
- [译]Vulkan教程(09)窗口表面
- LeetCode 652: 寻找重复的子树	Find Duplicate Subtrees