LeetCode 1255 得分最高的单词集合 Maximum Score Words Formed by Letters
地址 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;
}
};
LeetCode 1255 得分最高的单词集合 Maximum Score Words Formed by Letters的更多相关文章
- 【leetcode】1255. Maximum Score Words Formed by Letters
题目如下: Given a list of words, list of single letters (might be repeating) and score of every charact ...
- UVA 12906 Maximum Score 排列组合
Maximum Score Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vie ...
- [LeetCode] Concatenated Words 连接的单词
Given a list of words (without duplicates), please write a program that returns all concatenated wor ...
- java基础(10)---leetcode的String、数组以及集合的一些使用
整数 一.整数反转_7 /* 12345 变成 54321 */ public class 整数反转_7 { public static void main(String[] args){ int x ...
- [LeetCode] Valid Word Square 验证单词平方
Given a sequence of words, check whether it forms a valid word square. A sequence of words forms a v ...
- [LeetCode] Valid Word Abbreviation 验证单词缩写
Given a non-empty string s and an abbreviation abbr, return whether the string matches with the give ...
- [LeetCode] Shortest Word Distance 最短单词距离
Given a list of words and two words word1 and word2, return the shortest distance between these two ...
- [LeetCode]题解(python):104 Maximum Depth of Binary Tree
题目来源 https://leetcode.com/problems/maximum-depth-of-binary-tree/ Given a binary tree, find its maxim ...
- [LeetCode] Short Encoding of Words 单词集的短编码
Given a list of words, we may encode it by writing a reference string S and a list of indexes A. For ...
随机推荐
- ABAP里SELECT的用法汇总(转)
通常使用Open SQL的数据查询语句SELECT将数据库条目选择到内存.一.SELECT语句:1)SELECT用于确定读取数据表中的哪些字段:2)FROM子句用于确定从哪些内表或者视图中读取数据:3 ...
- 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin,password
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- MS16-072域内中间人攻击
0x01 漏洞利用 在目标主机域用户口令已知的条件下,目标主机在进行策略更新时,对域服务器的认证存在漏洞,攻击者劫持认证服务器的过程,引导至伪造的域服务器,并在域服务器中制定用户的计划任务策略,可以获 ...
- vue--CRUD
1. Create this.$http.post("http://localhost:3000/users",newCustomer).then(function (respon ...
- Spring Bean Expression Language(EL)
1, Add dependency. <dependency> <groupId>org.springframework</groupId> <artifac ...
- 抖音短视频教程VIP培训课程(2019实时更新中)
抖音联盟,抖友会,抖音联盟会员,抖音联盟学员,抖音批量做号团队,工作室带队,联盟学员统一官网认证可查,统一变现渠道担保,成熟技术技术后盾,实时工作室真机实测规则,抖音情感励志书单模式2.0升级,拒绝落 ...
- (python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, 'Read timed out.')
(python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, ‘Read timed out.’)pip工具安装百度经验链接: pip安装 ...
- openldap数据备份还原
数据备份[root@Server ~]# slapcat -n 2 -l /root/ldapbackup_ilanni.ldif脚本 ----- #!/bin/bash # 备份脚本 PATH=&q ...
- 游戏《Minecraft》IntelliJ下模组开发环境ForgeGradle的使用教程
嗯,当你想搞个模组的时候,肯定需要用到FG. 就比如编译模组的时候. 很好,首先下载源码去. files.minecraftforge.net/ 然后打开命令行到源码目录下 执行命令~ Win: ...
- LeetCode--回文数(简单)
题目描述: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解 ...