LeetCode1160.拼写单词(每日一题)

【5分钟力扣】1160.拼写单词(python3实现) 每天五分钟,看懂一道简单、中等难度的算法题,尽可能将复杂的题讲清楚。 阅读详情

#LeetCode1160.拼写单词(每日一题)
给你一份【词汇表】(字符串数组)words和一张【字母表】(字符串)chars。
假如你可以用chars中的【字母】(字符)拼写出words中的某个【单词】(字符串),那么就认为掌握了这个单词。
注意:每次拼写时,chars中的每个字母都只能用一次。
返回词汇表words中你掌握的所有单词的长度之和。

其实这道题在LeetCode上标记为简单题,看到题目自然想到用HashMap来做:

  • 用两个HashMap,一个charMap用来存储chars中的【字母】(字符)及其个数,另一个stringMap用来存储【词汇表】(字符串数组)words中的【字母】(字符)及其个数;
  • 将两个HashMap中相对应的键值进行比较,只要stringMap中相对应的键值小于等于charMap中相对应的键值,长度加上该单词的长度;
  • 用到的Map的遍历是很方便很喜欢的:for(Map.Entry<Character,Integer> e:stringMap.entrySet())
    public int countCharacters(String[] words, String chars) {
        if(words.length==0)return 0;
        int length=0;
        Map<Character,Integer> stringMap=new HashMap<Character,Integer>();
        Map<Character,Integer> charMap=new HashMap<Character,Integer>();
        for(int i=0;i<chars.length();++i){
            if(!charMap.containsKey(chars.charAt(i)))
            charMap.put(chars.charAt(i),1);
            else 
            charMap.put(chars.charAt(i),charMap.get(chars.charAt(i))+1);
        }
        for(int i=0;i<words.length;++i){
            String currWord=words[i];
            boolean b=true;
            for(int j=0;j<currWord.length();++j){
                if(!stringMap.containsKey(currWord.charAt(j)))
                    stringMap.put(currWord.charAt(j),1);
                else{
                    stringMap.put(currWord.charAt(j),stringMap.get(currWord.charAt(j))+1);
                } 
            } 
            //在这里用到的是一种遍历Map的超好用的方法(特别是容量较大时!):
            //Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value , 每一对键值就是一个Entry,包含getKey()和getValue()方法
            //entrySet是 java中 键值对的集合,实现了Set接口,Set里面的类型是Map.Entry,可以通过map.entrySet()得到
            for(Map.Entry<Character,Integer> e:stringMap.entrySet()){
            	if(charMap.containsKey(e.getKey())&&e.getValue()<=charMap.get(e.getKey()))
                b=true;                
                else{
                    b=false;
                    break;
                }
            }
            if(b)length=length+currWord.length();
            stringMap.clear();
        }
        return length;
   }

以上方法时间复杂度O(N);
后来看题解时,看到基于ASCII码的26个字母组成的数组的方法(a的ASCII值为97,A的ASCII值为65),思路很巧妙:

public int countCharacters(String[] words, String chars) {
        int length=0;
        int[] charLetters=new int[26];
        //遍历chars,统计出现的字母及其个数
        for(char c:chars.toCharArray()){
            //用字母之间的ASCII值做差的数字来作为下标,int[0]=1就代表字母a出现了一次,真的很巧妙了,学到了
            charLetters[c-'a']+=1;
        }
         //遍历words,统计words中每一个单词中出现的字母及其个数
         //JAVA中的循环体的标签真的很好用,可以直接在内层循环中跳到外层循环的下一次操作,就像一个开关,随时开启循环。
        a:for(String word:words){
            int[] wordLetters=new int[26];
            for(char w:word.toCharArray()){
                wordLetters[w-'a']+=1;
            }
            for(int i=0;i<26;++i){
                if(wordLetters[i]>charLetters[i])
                continue a;
            }
            length+=word.length();
        }
        return length;
    }

虽然是简单题,但是寻找更优解的过程中也学到了很多。

C语言查找奥运五环色的位置 C语言查找奥运五环色的位置要实现的功能如下完整源代码实现如下 要实现的功能如下 奥运五环的5种颜色的英文单词按一定顺序排列{“red”, “blue”, “yellow”, “green”, “black” },定义指针数组并初始化,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出"Not Found"。 完整源代码实现如下 #include<stdio.h> #include<string.h> int main() { char *p[ 阅读详情

相关推荐

VC++奥运五环小程序

用MFC编写的一个显示奥运五环的程序 代码简单易懂 是实验的课程之一

用二级指针操作指针数组

使用指针数组操作多个字符串,还可以通过二级指针变量的方式进行这种操作,首先定义一个字符串指针数组s,用来指向多个字符串常量,再定义一个二级指针变量p,使其指向数组s,因数组s中的每个元素都是数组,因此指针变量p必须定义为指向指针的指针(即二级指针)。

1574

输入英语单词及单词解释,把数据追加到文件中。要求提供单词查询功能。用户输入单词后,从单词库文件中查找,如果存在则输出该单词的解释。

要求从控制台输入英语单词及单词解释两项数据, 把录入的数据追加到文件中。要求提供单词查询功能。 用户输入单词后,从单词库文件中查找,如果存在则输出 该单词的解释。注意,单词不能有重复,如果重复则覆盖替换 以前的解释数据。

7-12 查找奥运五环色的位置

7-12 查找奥运五环色的位置 分数 10 作者 张泳 单位 浙大城市学院 奥运五环的5种颜色的英文单词按一定顺序排列{"red", "blue", "yellow", "green", "black" },定义指针数组并初始化,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出"Not Found"。 输入格式: 输入一个代表颜色的单词。 输出格式: 输出单词对应的位置值,如果未找到,输出Not Found。 输入样例: yellow 输出样例: 3

xiao_xiao_ming_的博客 1992

4、I3C协议详解

I3C最初的设计目的是为移动设备创建一个能够使用多个传感器的单一接口。随着现代化移动设备对于传感器数量的增加以及对性能的提高,I2C和SPI已经达到了他们所能支持的临界点,而I3C的出现就是为了解决这一问题,I3C可以在同一根主线上支持更多的传感器设备,而且不会因为要支持中断或睡眠模式而增加额外的逻辑信号。I3C可以在更低功耗的情况下提供更快的传输速率,该特性的提升不止是对移动设备,对其他的嵌入式设备也都是很大的帮助。例如穿戴设备,需要在有限的物理空间中使用多个传感器并且要求更小的耗电。 一、简述..

迟子涵925的博客 2万+

基于FPGA的ov5640摄像头简易图像采集装置详解

本文介绍一种基于FPGA的,通过流模式DDR实现OV5640摄像头数据采集并显示的方法。

qq_42230252的博客 1万+

C/C++数据结构练习题[2023-05-08]

目的:字符串是一种基础且广泛使用的数据结构,与字符串相关的题目既可 以考察基本程序设计能力和技巧,也可以考查算法设计能力。 题目:求字符串之间距离 要求:设有字符串 X,称在 X 的头尾及中间插入任意多个空格后构成的新 字符串为 X 的扩展串,如字符串 X 为“abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□” 和“abcb□cd□”都是 X 的扩展串,这里“□”代表空格字符。如果 A1 是字符串 A 的 扩展串,B1 是字符串 B 的扩展串,A1 与 B1 具有相同的长度,那么定义字符串

code helper 1万+

自动驾驶技术路线之争:纯视觉与多模态融合的成本与性能博弈

本文深入剖析了自动驾驶领域两大主流技术路线——纯视觉与多模态融合的本质差异。文章从成本结构、性能博弈与商业逻辑等多维度展开,揭示了纯视觉方案在硬件成本与数据算力投入上的权衡,以及多模态融合方案在安全冗余与感知稳定性方面的优势。这场技术路线之争,实则是车企在性能、成本与商业化落地之间寻求平衡的综合博弈。

weixin_29038303的博客 390

【LeetCode每日一题】1160. 拼写单词

给你一份『词汇表』(字符串数组)words和一张『字母表』(字符串)chars。 假如你可以用chars中的『字母』(字符)拼写出 words中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,chars 中的每个字母都只能用一次。 返回词汇表words中你掌握的所有单词的 长度之和。 示例 1: 输入:words = ["cat","b...

韩旭051的博客 1055

IIC协议常见误区解析:从时序图到实际波形(附逻辑分析仪实测)

本文深入解析IIC协议在实际应用中的常见误区,从理想时序图到逻辑分析仪实测波形的差异,揭示通信故障的根本原因。通过硬件设计优化、软件时序调优和高级调试技巧,帮助开发者有效规避IIC通信中的隐形陷阱,提升系统稳定性。

weixin_28738397的博客 370

Vue Vben Admin 登录页修改全攻略:从登录界面定制到接口对接全流程配置

方式一:修改国际化文件找到对应的语言包文件,修改和的值。方式二:直接传递文本page-description="现代化的后台管理系统模板"page-title="欢迎使用 Vue Vben Admin"从上面的代码可以看出,登录表单使用了的方式来定义表单字段,这种方式提供了极大的灵活性。如果你想要自定义表单,可以修改formSchema数组。如果你的登录需求非常特殊,现有的组件无法满足,你可以完全自定义表单。只需在login.vue中替换<template><h2>自定义登录</h2>

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 478

【Leetcode 每日一题】1160.拼写单词

题目描述 难度:简单 给你一份『词汇表』(字符串数组)words和一张『字母表』(字符串)chars。 假如你可以用chars中的『字母』(字符)拼写出 words中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,chars 中的每个字母都只能用一次。 返回词汇表words中你掌握的所有单词的 长度之和。 示例 1: 输入:words =...

ColorGalaxy 418

【异常】Nacos 2.x 核心报错:Server check fail (gRPC 端口连不通) 深度排查

如果 Nacos 运行在 K8s 中,需确保对应的Servicemetadata:spec:ports:port: 8848port: 9848 # 必须暴露此端口selector:app: nacos在 Nacos 2.x 时代,“端口成套出现”是基础设施配置的基本要求。遇到连接失败时,首要检查的不是业务配置,而是网络链路上主端口 + 1000的 TCP 通讯是否被放行。更多关于 AI + 教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 324

LeetCode每日一题———1160. 拼写单词

一开始的想法是key+value,通过word表的单词来索引char表的key,进而得到value,这里的value我当做字母出现的次数来对待。 正好最近在学习数据结构,看到了哈希表这一节,hash_map,也就是通过键值来对应value。 具体做法是先遍历char表的元素,并且用哈希表统计各个字母出现的次数,再遍历word表的每一个元素,为了避免重复使用,加一个if判断,如果出现了该字母并且对...

qq_36202348的博客 251

基于YOLOv5s的RK3588多线程部署16FPS暴涨到120FPS 轻量化深度学习部署实战教程(包括性能优化与加速)37

本文介绍了如何在RK3588平台上利用线程池优化YOLOv5模型的推理性能。RK3588内置3个NPU核心,支持多核并行处理。作者设计了一个线程池架构:1个线程负责数据读取,10个线程处理NPU运算,1个线程输出结果。该架构包含任务队列、线程管理和工作线程三个核心组件,通过合理设置线程数、任务队列大小等参数确保性能稳定。文章提供了详细的C++实现代码,包括线程池初始化、任务提交、结果获取等功能模块,并讨论了多线程同步和内存管理的关键技术要点。该方案可显著提升深度学习模型在嵌入式设备上的部署效率。

FJN110的博客 9225

15-YOLOV8OBB损失函数详解

在Ultralytics YOLO 模型中,OBB 由YOLO OBB 格式中的四个角点表示。这样可以更准确地检测到物体,因为边界框可以旋转以更好地适应物体。其坐标在 0 和 1 之间归一化:YOLO 在内部处理损失和输出是xywhr 格式,xy表示边界框的中心点、whr表示宽度、高度和旋转角度。

zqb_123的博客 797

leetcode每日一题—1160. 拼写单词

题目描述: 思想:刚看题的时候想用暴力破解来算,可是运行内存和运行时间都会比较长。 这个题由于提示里说明“所有字符都只包含小写英文字母”,借用leetcode中的一句话:凡是和“变位词”、“字母顺序打乱”相关的题目,都考虑统计字母出现的次数。 首先挨个统计字符串数组中每个字符串字母出现的次数;然后统计字母表里每个字母出现的次数。 如果字符串数组里的字符串统计的次数大于字母表里的次数,则不计算; ...

along 207

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

每日一题——LeetCode1160.拼写单词

2、chars不能被修改,但是可以创建chars的副本,可以修改副本来达到比较,匹配一个字符就在副本里删除一个字符,保证字符只能使用一次。1、word要求由chars拼写且字符不能重复使用,那么word.length<=chars.length。以上两种情况则不符合题意,其他的则为满足的单词,统计他们的长度并累加。2、字符串里某个字符出现的次数大于该字符在chars里出现的次数。1、字符串里出现chars里没有的字符。

weixin_52878347的博客 492

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

leetcode三月每日一题(1160)拼写单词

题目: 思路: 原理:对于词汇表中的每个单词,只要单词中每个字符出现的次数只要小于等于字母表中每个字符出现的次数,那么单词就可以用字母表表示。 因此,利用以下思路解决: 建立两个字典进行存储,一个字典存储词汇表中的每个单词中每个字符出现的次数,一个字典存储字母表中每个字符出现的次数。 代码如下: class Solution: def countCharacters(self, word...

cy_believ的博客 188

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【每日一题】Leetcode - 1160. Find Words That Can Be Formed by Characters(拼写单词)

题目来源 Leetcode,感谢????‍,如果内容对你有帮助,欢迎点赞 ???? 题目描述 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,chars 中的每个字母都只能用一次。 返回词汇表 words...

sunshine2285的博客 284

Leetcode每日一题2020.2.25第1160题:拼写单词

代码 class Solution: def countCharacters(self, words: List[str], chars: str) -> int: chars_cnt = collections.Counter(chars) ans = 0 for word in words: word_cnt = collections.Counter(word) if all([word_cn

m0_51210480的博客 110

LeetCode1160.拼写单词

LeetCode1160.拼写单词 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,chars 中的每个字母都只能用一次。 返回词汇表 words 中你掌握的所有单词的 长度之和。 **示例 1**: 输入:wo...

weixin_43294413的博客 390

【LeetCode:1160. 拼写单词 + 哈希表】

【LeetCode:1160. 拼写单词 + 哈希表】给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。 返回词汇表 words 中你掌握的所有单词的 长度之和。

Coder_ljw的博客 992

LeetCode 1160. 拼写单词

LeetCode 1160. 拼写单词 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,chars 中的每个字母都只能用一次。 返回词汇表 words 中你掌握的所有单词的 长度之和。 示例 1: 输入:words...

缇欧的咪西 276

leetcode -1160 -拼写单词 -java版

文章目录题目代码 题目 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。 返回词汇表 words 中你掌握的所有单词的 长度之和。 示例 1: 输入:words = [“cat”,“bt”,“hat”,“tree”], chars = “atach” 输出:6

lingle1的博客 665
上一篇: 二叉树的遍历(JAVA递归和非递归版)
下一篇: 四种根据给定遍历序列构造二叉树总结(JAVA递归和非递归版)
Ming宸
博客等级 码龄7年 5粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值