[LeetCode] 1160. Find Words That Can Be Formed by Characters 拼写单词
时间:2021-07-15
本文章向大家介绍[LeetCode] 1160. Find Words That Can Be Formed by Characters 拼写单词,主要包括[LeetCode] 1160. Find Words That Can Be Formed by Characters 拼写单词使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
You are given an array of strings words
and a string chars
.
A string is good if it can be formed by characters from chars
(each character can only be used once).
Return the sum of lengths of all good strings in words
.
Example 1:
Input: words = ["cat","bt","hat","tree"], chars = "atach"
Output: 6
Explanation:
The strings that can be formed are "cat" and "hat" so the answer is 3 + 3 = 6.
Example 2:
Input: words = ["hello","world","leetcode"], chars = "welldonehoneyr"
Output: 10
Explanation:
The strings that can be formed are "hello" and "world" so the answer is 5 + 5 = 10.
Note:
1 <= words.length <= 1000
1 <= words[i].length, chars.length <= 100
- All strings contain lowercase English letters only.
这道题给了一个单词数组 words,还有一个字符串 chars,定义了一种好字符串,说是能由 chars 中的字母组成的单词,限定每个字母只能使用一次,不必都使用,求所有好字符串的长度之和。既然是 Easy 的身价,自然不会用到太 fancy 的解法,就是一个单纯的字母统计问题,建立 chars 字符串中每个字母和其出现次数之间的映射,然后遍历每个单词,拷贝一个 chars 字符串的 HashMap,然后遍历当前单词的每个字母,对应字母的映射值减1,若为负数了,表示 chars 中缺少必要的单词,标记为 false。若最终为 true,则将当前单词的长度加入结果 res 中即可,参见代码如下:
class Solution {
public:
int countCharacters(vector<string>& words, string chars) {
int res = 0;
unordered_map<char, int> charCnt;
for (char c : chars) ++charCnt[c];
for (string word : words) {
unordered_map<char, int> m = charCnt;
bool succeed = true;
for (char c : word) {
if (--m[c] < 0) {
succeed = false;
break;
}
}
if (succeed) res += word.size();
}
return res;
}
};
Github 同步地址:
https://github.com/grandyang/leetcode/issues/1160
参考资料:
https://leetcode.com/problems/find-words-that-can-be-formed-by-characters/
原文地址:https://www.cnblogs.com/grandyang/p/15013926.html
- CSS3制作心形头像
- CSS魔法堂:重拾Border之——不仅仅是圆角
- scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归
- java之log4j的配置
- scala 学习笔记(02) 元组Tuple、数组Array、Map、文件读写、网页抓取示例
- scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类
- 使用jQuery封装实用函数
- scala 学习笔记(05) OOP(中)灵活的trait
- Web Fundamentsals学习1-Multiple-Screen-Site
- Vagrant使用
- java 中的异步回调
- 澳大利亚域名管理机构多年敲竹杠?
- ASP.NET中使用HttpWebRequest调用WCF
- scala 学习笔记(06) OOP(下)多重继承 及 AOP
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈keras中loss与val_loss的关系
- python中tkinter窗口位置坐标大小等实现示例
- python os模块在系统管理中的应用
- Laravel路由研究之domain解决多域名问题的方法示例
- python GUI模拟实现计算器
- 详解php命令注入攻击
- PHP设计模式之策略模式原理与用法实例分析
- python使用QQ邮箱实现自动发送邮件
- php使用lua+redis实现限流,计数器模式,令牌桶模式
- PHP whois查询类定义与用法示例
- Laravel多域名下字段验证的方法
- ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
- 简单了解如何封装自己的Python包
- python求解汉诺塔游戏
- Python第三方包PrettyTable安装及用法解析