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 stringswordsand a stringchars. A string isgoodif it can be formed by characters from chars (each character can only be used once). Returnthe sum of lengths of all good strings in words. Example 1: Input: words = ["cat... 阅读详情

这是小川的第411次更新,第443篇原创

看题和准备

今天介绍的是LeetCode算法题中Easy级别的第262题(顺位题号是1160)。你会得到一个字符串单词数组和一个字符串chars。如果字符串可以由字符中的字符组成(每个字符只能使用一次),则该字符串是好的。返回所有好的字符串的长度之和。

例如:

输入:words = [“cat”,“bt”,“hat”,“tree”],chars =“atach”
输出:6
说明:可以形成的字符串是"cat"和"hat",因此答案是3 + 3 = 6。

输入:words = [“hello”,“world”,“leetcode”],chars =“welldonehoneyr”
输出:10
说明:可以形成的字符串是"hello"和"world",因此答案是5 + 5 = 10。

注意:

  • 1 <= words.length <= 1000

  • 1 <= words[i].length , chars.length <= 100

  • 所有字符串仅包含小写英文字母。

第一种解法

题目的意思是,给了一个由英文小写字母组成的字符串chars,在字符串数组words中,如果单词能够由chars中的字符组成,那么此单词就是一个好单词。

我们直接翻译题目即可,将chars理解成一个数组字典,每个字母出现的次数计数,变成一个26位长度的int数组,接着去遍历words中的单词,采用同样的原理,将单词每个字母当做字典数组的索引,出现一次就减1,如果字典数组中的元素值小于0,说明当前单词无法由chars中的字母组成,结束本此循环,直到遍历完所有单词。

public int countCharacters(String[] words, String chars) {
    // 获取字典数组
    int[] dict = stringToIntegerArray(chars);
    int sum = 0;
    for (int i=0, len=words.length; i<len; i++) {
        // 复制一份字典数组,为后面的减法做准备
        int[] temp = dict.clone();
        int len2 = words[i].length();
        // 默认当前单词是好字符串
        boolean flag = true;
        for (int j=0; j<len2; j++) {
            // 单词中的字母不在字典中,或超过使用次数
            if (--temp[words[i].charAt(j)-'a'] < 0) {
                flag = false;
                break;
            }
        }
        if (flag) {
            sum += words[i].length();
        }
    }
    return sum;
}

/**
 * 将字符串转为长度为26的int数组
 * @param s 字符串
 * @return 长度为26的int数组
 */
public int[] stringToIntegerArray(String s) {
    int[] arr = new int[26];
    for (int i=0, len=s.length(); i<len; i++) {
        arr[s.charAt(i)-'a']++;
    }
    return arr;
}

第二种解法

和第一种解法的思路类似,只是将第一种解法的数组复制替换成了另外一种写法,将当前单词也转为一个长度为26的int数组,然后比较字典数组和单词数组元素值的大小,如果单词数组当前元素值大于字典数组当前元素值,则表示单词中的某些字母不在字典中或者出现次数超过了字典中的次数。

public int countCharacters2(String[] words, String chars) {
    // 获取字典数组
    int[] dict = stringToIntegerArray(chars);
    int sum = 0, len = words.length, len2 = dict.length;
    for (int i=0; i<len; i++) {
        // 将单词也转为int数组
        int[] temp = stringToIntegerArray(words[i]);
        boolean flag = true;
        for (int j=0; j<len2; j++) {
            if (temp[j] > dict[j]) {
                flag = false;
                break;
            }
        }
        if (flag) {
            sum += words[i].length();
        }
    }
    return sum;
}

/**
 * 将字符串转为长度为26的int数组
 * @param s 字符串
 * @return 长度为26的int数组
 */
public int[] stringToIntegerArray(String s) {
    int[] arr = new int[26];
    for (int i=0, len=s.length(); i<len; i++) {
        arr[s.charAt(i)-'a']++;
    }
    return arr;
}

小结

算法专题目前已更新LeetCode算法题文章268+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

寻迹Arduino智能小车 Arduino巡线寻迹智能小车 阅读详情

相关推荐

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 630

Day40 Map01

给定一个字符串数组 words 和一个字符串 chars. 如果一个字符串能被 chars 里面的字符组成,那么这个字符串就是"好"的(chars里面每个字符只能使用一次)。 求:words 里面所有好的字符串的字符总个数。 比如: words = [“cat”, “bt”, “hat”, “tree”] chars = “atach” 好的字符串有 “cat”, “hat”, 3 + 3 =...

隐身的六娃 1053

QKD(量子密钥分发)

量子密钥分发(Quantum Key Distribution,QKD)是一种基于量子力学原理的安全通信协议,它允许两个用户通过不安全的通信信道创建并共享一个安全的密钥。这个密钥随后可以用于加密和解密信息,确保通信的机密性。QKD的核心原理是量子不可克隆定理和量子测量的不确定性。

qq_40844444的博客 2897

给定一个字符串数组 words 和一个字符串 chars. 如果一个字符串能被 chars 里面的字符组成,那么这个字符串就是"好"的(chars里面每个字符只能使用一次)。 求:words 里面所有...

给定字符串数组 words 和字符串 chars,如果一个字符串在 chars 中可以找到对应的字符(每个字符只能使用一次),则该字符串是“好”的。要求:求出 words 中所有“好”字符串的字符总数。例如:words = ["cat", "bt", "hat", "tree"],chars = "atach",其中好的字符串有 "cat"、"hat",字符总数为 3 + 3 = 6,输出为 6。...

weixin_42584586的博客 643

RT-Thread网络编程:基于STM32F407的TCP客户端实现(含完整代码解析)

本文详细介绍了在STM32F407平台上,基于RT-Thread操作系统和LWIP协议栈实现工业级可靠TCP客户端的完整过程。内容涵盖底层ETH驱动配置、Socket编程、连接保活与断线重连机制、数据收发协议设计以及资源管理,提供了可应用于实际项目的健壮代码框架与调试技巧。

weixin_29184371的博客 494

【UE4】Hierarchical Instanced Static Mesh——一种速度优于Spawn的实例化物体组件

最近需要在场景中实例出很多个相同的模型,位置也很有规律,并且要对它的位置信息进行更新。 但是一个个拖进去实在太麻烦,就发现了Spawn Actor这个蓝图方法,可以实例一个蓝图类在场景中。 但是由于数量较大,实例化的速度太慢,这时发现了一个神奇的组件——Hierarchical Instanced Static Mesh。 新建一个蓝图类,添加该组件,在细节里添加你要实例化的模型对象。 ...

ColorGalaxy 1万+

python 字符串遍历_LeetCode基础算法题第159篇:找出由特定字符数组组成的字符串...

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。如果有任何问题可以在文章后评论或者私信给我。如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。持续分享,敬请关注。L...

weixin_35779309的博客 588

避坑指南:LVGL在Arduino环境编译报错?3步搞定lv_conf.h路径问题(附ST7789屏幕调试技巧)

本文详细解析了在Arduino环境中配置LVGL图形库时,如何解决常见的“lv_conf.h file not found”编译报错问题。通过三步法:定位并复制模板文件、启用核心配置并指定路径、配置基础参数,从根本上解决路径问题。文章还结合ST7789屏幕驱动,分享了使用TFT_eSPI库进行显示适配、内存优化及背光控制等实战调试技巧,帮助开发者建立清晰、可维护的嵌入式UI工程基础。

lake5的博客 860

集合:Map

Map接口 概述 在JDK1.2之前使用的是Dictionary抽象类(字典 = 映射)。JDK1.2之后,才有了Map(映射)接口。 有时Map也被称之为字典,索引。 将键映射到值的对象。(我们可以根据键快速查找到关联的值) Map中键是唯一的(不包含重复的键) 每个键最多只能映射一个值 Map的API Map<String, String> map = new HashMap<>(); map.put("刘强东", "章泽天"); map.put("文章", "马伊利");

Rul丶的博客 408

SAP 权限配置(复合角色)

复合角色创建步骤:业务场景:通常单一角色权限颗粒度划分比较细,当需要分配单一角色权限A、B(多个单一角色)给某账号用户Y时,可以先建立一个复合角色C,将A、B绑定到复合角色C中,再将角色C分配给账号Y即完成权限配置。 业务模拟: 1、PFCG创建复合角色: 2、在角色页面添加子角色 在角色分页内添加子角色,点击“菜单”分页中的“读菜单”即可导入子角色中的菜单: 3、将用户分配给...

willieyuan的博客 7089

PyTorch实战(14)——图注意力网络(Graph Attention Network,GAT)

本节介绍了图注意力网络 (Graph Attention Network, GAT) 在节点分类任务中的应用。相比图卷积网络 (GCN) 的平均聚合机制,GAT 通过引入注意力机制,能够为不同邻居节点分配差异化权重,从而更精准地捕捉图结构信息。实验表明,GAT 在 CiteSeer 数据集上的分类准确率达到 71.1%,较 GCN 提升 2.5 个百分点。可视化结果显示,GAT 学习到的节点表征具有更好的类别区分度。这验证了注意力机制在图数据建模中的有效性,为处理复杂图结构任务提供了更优解决方案。

盼小辉丶的博客 3610

[leetcode]1160. 拼写单词

个人博客:https://javaniuniu.com/ 难度:简单 本题涉及算法:哈希表记数 思路:哈希表记数 类似题型:- 题目 1160. 拼写单词 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,ch...

java牛牛的博客 389

SAP HANA CDS View Syntax Options 全解:从语法到工程实践

本文面向SAP HANA工程师,深入解析CDS视图的语法与应用场景。文章涵盖XS Advanced环境下的CDS视图设计要点,包括SELECT基础语法、聚合函数与分组约束、参数化视图实现以及常见连接操作。特别强调工程实践中的注意事项:GROUP BY禁用表达式、原生表名大小写规范、结果集裁剪方式选择等。通过两个真实案例(办公室占用率统计和客户画像分析)展示CDS视图在实际业务中的应用,并提供性能优化建议。全文采用中英文混排规范,技术术语使用反引号标注,旨在为开发者提供清晰的CDS视图开发指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 215

LeetCode | 1160. Find Words That Can Be Formed by Characters拼写单词【Python】

LeetCode 1160. Find Words That Can Be Formed by Characters拼写单词【Easy】【Python】【字符串】 Problem LeetCode You are given an array of strings words and a string chars. A string is good if it can be formed by...

Wonz 587

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【LeetCode】1160. Find Words That Can Be Formed by Characters 解题报告(C++)

作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录题目描述题目大意解题方法字典统计日期 题目地址:https://leetcode-cn.com/problems/index-pairs-of-a-string/submissions/ 题目描述 You are given an array of strings...

负雪明烛 1039

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

1160. Find Words That Can Be Formed by Characters

#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...

qq_34471804的博客 307

1160. Find Words That Can Be Formed by Characters*

1160. Find Words That Can Be Formed by Characters* https://leetcode.com/problems/find-words-that-can-be-formed-by-characters/ 题目描述 You are given an array of strings words and a string chars. A string ...

珍妮的选择的博客 397

leetcode 1160. Find Words That Can Be Formed by Characters(python)

描述 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","b

王大呀呀的博客 418

LeetCode 1160. 拼写单词 Find Words That Can Be Formed by Characters

Table of Contents 一、中文版 二、英文版 三、My answer 四、解题报告 一、中文版 给你一份『词汇表』(字符串数组)words和一张『字母表』(字符串)chars。 假如你可以用chars中的『字母』(字符)拼写出 words中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写时,chars 中的每个字母都只能用一...

三妹的博客 333

LeetCode 1160. Find Words That Can Be Formed by Characters (Java版; Easy)

welcome to my blog LeetCode 1160. Find Words That Can Be Formed by Characters (Java版; Easy) 题目描述 You are given an array of strings words and a string chars. A string is good if&nb...

littlehaes的博客 365

LeetCode-1160. Find Words That Can Be Formed by Characters

You are given an array of stringswordsand a stringchars. A string isgoodifit can be formed bycharacters fromchars(each charactercan only be used once). Return the sum of lengths of all goo...

reigns的博客 429

【leetcode】1160. Find Words That Can Be Formed by Characters

题目如下: You are given an array of stringswordsand a stringchars. A string isgoodifit can be formed bycharacters fromchars(each charactercan only be used once). Return the sum of leng...

weixin_30254435的博客 151

【Leetcode】1160. Find Words That Can Be Formed by Characters

题目地址: https://leetcode.com/problems/find-words-that-can-be-formed-by-characters/ 给定一个字符串数组,再给定另一个字符串sss,问数组中能由sss中字符组成的所有字符串的长度之和。题目保证所有字符串只含英文小写字母。 用一个数组记录sss中每个字母出现次数。然后逐个比较数组中每个字符串能否被表示即可。代码如下: import java.util.Arrays; public class Solution { publi

数学、算法爱好者的博客 202

[LeetCode] 1160. Find Words That Can Be Formed by Characters

Easy You are given an array of stringswordsand a stringchars. A string isgoodifit can be formed bycharacters fromchars(each charactercan only be used once). Return the sum of lengths...

dey8091的博客 175

[leetcode] 1160. Find Words That Can Be Formed by Characters

Description 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 =

Learning from the mistakes 189

leetcode 1160. Find Words That Can Be Formed by Characters 拼写单词

leetcode 1160. Find Words That Can Be Formed by Characters 拼写单词 leetcode 2020年3月 每日一题打卡 程序员面试金典 题目: 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握...

weixin_43973433的博客 209

LeetCode C++ 1160. Find Words That Can Be Formed by Characters【Hash Table】简单

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".

memcpy0的博客 356
上一篇: LeetCode.1154-一年中的第几天(Day of the Year)
下一篇: LeetCode.1170-比较字符串中最小字符的出现频率(Compare Strings by Frequency of the Smallest Char)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值