题目入口

力扣https://leetcode.cn/problems/find-words-that-can-be-formed-by-characters/

题目概述

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。

假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。

注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。

返回词汇表 words 中你掌握的所有单词的 长度之和。

示例 1:

输入:words = ["cat","bt","hat","tree"], chars = "atach"
        输出:6
        解释: 可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
示例 2:

输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
        输出:10
        解释:可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。

方法一:暴力解法

java示例

import java.util.*;
class Solution {
public int countCharacters(String[] words, String chars) {
int res = 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] arr = chars.toCharArray();
for(int i =0;i<arr.length;i++){
map.put(arr[i],map.getOrDefault(arr[i],0)+1);
}
for(int i=0;i<words.length;i++){
if(mastered(words[i],map)){res+=words[i].length();}
}
return res;
}
public boolean mastered(String word,Map<Character,Integer> map){
Map<Character, Integer> copiedMap = new HashMap<>();
copiedMap.putAll(map);
char[] arr = word.toCharArray();
for(int i=0;i<arr.length;i++){
if(copiedMap.getOrDefault(arr[i],0)<=0) { return false; }
copiedMap.put(arr[i],copiedMap.getOrDefault(arr[i],0)-1);
}
return true;
}
}

时间复杂度:O(S),S为字符集长度

空间复杂度:O(N)

[每日算法 - 华为机试] LeetCode1160. 拼写单词的更多相关文章

  1. 华为机试001:字符串最后一个单词的长度(华为OJ001)

    华为机试 字符串最后一个单词的长度 计算字符串最后一个单词的长度,单词以空格隔开. 提交网址: http://www.nowcoder.com/practice/8c949ea5f36f422594b ...

  2. 2014华为机试西安地区B组试题

    2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...

  3. 2014华为机试西安地区A组试题

    2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...

  4. 华为机试ACM(字符组合问题)

    今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合. eg: input:ABC 2 output:AB AC BC 第一个输入为字符串,第二个输入为组合的字符个数 ...

  5. 华为机试正式版(西安c/c++/java),今天下午去机试的题目,新奇出炉了!

    下面题目都是回顾的.题目都非常easy, 大家有些基础就能够參加!(语言能够是c/c++.也能够是java的) 题目一(60分): 字符串操作. 将小写转换成大写, 将大写转化为小写, 数字的不做转换 ...

  6. 华为机试_字符串识别_Vector的使用;

    第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列.转换关系如下:描述:      拼音        yi  er  san  si  wu  liu  qi  ba  jiu  ...

  7. 输入一个字符串,去掉重复的字符,并按ASCII值排序-华为机试

    import java.util.Scanner; //输入字符串,去掉重复的字符,并按ASSIC码值排序 public class quChong { public static void main ...

  8. 2015华为机试——数字基root

    题目描写叙述: 求整数的Root:给定正整数,求每位数字之和;假设和不是一位数,则反复; 输入:输入随意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行相 ...

  9. 华为机试 之 joseph环

    一:首先科普一下约瑟夫问题的数学方法 (1)  不管是用list实现还是用vector实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比較烦,并且时间复杂度高达O(nm),当n,m很大(比如上百 ...

  10. 华为机试-iNOC产品部-杨辉三角的变形

    题目描述 1 1 1 1 1 2 3 2 1 1 3 6 7 6 3 11 4 10 16 19 16 10 4 1以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数 ...

随机推荐

  1. 创建Windows service使用FluentScheduler定时刷新网页

    我们都知道iis的程序池默认的闲置回收时间是20分钟, 如果是自己的服务器,我们可以设置成0,闲置不回收. 这样网站就不会出现每隔20分钟没有访客访问就出现打开非常慢的情况. 但是,如果个别网站不是用 ...

  2. wget命令简单使用

    wget是Linux下一个文件下载工具.wget支持HTTP.HTTPS.FTP协议,可使用HTTP代理. 所谓自动下载,是指 wget 可以在用户退出系统的之后在继续后台执行,直到下载任务完成. w ...

  3. cmake:引入第三方库

    需求:开源库中一般都需要引入第三方库,下面以引入boost库为例 (1)安装所需的三方库 boost安装:参考 (2)引入 这里的cmakelists文件为: # Import Boost (for ...

  4. LinkedList的源码

    LinkedList LinkedList是通过双向链表去实现的,他的数据结构具有双向链表的优缺点,既然是双向链表,那么的它的顺序访问效率会非常高,而随机访问的效率会比较低,它包含一个非常重要的私有内 ...

  5. a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false

  6. Win10 20H2 家庭版 环境变量

    20H2 家庭版设置环境变量,此电脑--->属性,弹出的是新版本的设置界面,选择左侧的"关于",在最右侧的"相关设置"里面,选择"高级系统设置& ...

  7. AI时代云动力:新一代弹性计算云主机开启智能计算新纪元!

    随着信息技术的飞速发展,云计算在企业数字化转型中发挥着愈发重要的作用. 弹性计算作为云计算技术的重要组成部分,以灵活的资源分配.高可用性等优势,在数字化转型中扮演着举足轻重的角色. 为打造更加卓越的上 ...

  8. 将VSCode设置为中文(汉化)

    1.VSCode安装好后默认语言为英文,此汉化过程的VSCode版本为1.42.1,如下图所示: 2.下载安装完成后,打开VSCode,使用快捷键Ctrl+Shift+P,然后在出现的输入框中输入co ...

  9. 【收藏】default.rdp配置

    原文链接:  https://www.cnblogs.com/vman/archive/2011/12/05/2276895.html 存储在 Default.rdp 文件中的设置 默认情况下,将在& ...

  10. QT5笔记: 8. QT的全局变量(基本数据类型、函数、宏)

    这个头文件中存放着QT类库的一些全局定义,一般Qt类的头文件会包含这个头文件: 基本数据类型 函数 宏 数据类型:保证跨平台时各数据类型长度统一 函数定义(一些数学函数未在QtGlobal中,而是在Q ...