748. 最短完整词

如果单词列表(words)中的一个单词包含牌照(licensePlate)中所有的字母,那么我们称之为完整词。在所有完整词中,最短的单词我们称之为最短完整词。

单词在匹配牌照中的字母时不区分大小写,比如牌照中的 "P" 依然可以匹配单词中的 "p" 字母。

我们保证一定存在一个最短完整词。当有多个单词都符合最短完整词的匹配条件时取单词列表中最靠前的一个。

牌照中可能包含多个相同的字符,比如说:对于牌照 "PP",单词 "pair" 无法匹配,但是 "supper" 可以匹配。

示例 1:

输入:licensePlate = "1s3 PSt", words = ["step", "steps", "stripe", "stepple"]
输出:"steps"
说明:最短完整词应该包括 "s"、"p"、"s" 以及 "t"。对于 "step" 它只包含一个 "s" 所以它不符合条件。同时在匹配过程中我们忽略牌照中的大小写。

示例 2:

输入:licensePlate = "1s3 456", words = ["looks", "pest", "stew", "show"]
输出:"pest"
说明:存在 3 个包含字母 "s" 且有着最短长度的完整词,但我们返回最先出现的完整词。

注意:

  1. 牌照(licensePlate)的长度在区域[1, 7]中。
  2. 牌照(licensePlate)将会包含数字、空格、或者字母(大写和小写)。
  3. 单词列表(words)长度在区间 [10, 1000] 中。
  4. 每一个单词 words[i] 都是小写,并且长度在区间 [1, 15] 中。

解法一

//时间复杂度O(m*n), 空间复杂度O(n)
class Solution {
public:string shortestCompletingWord(string licensePlate, vector<string>& words) {unordered_map<char, int> um;int count = 0;for(char c : licensePlate) {if(c >= 'a' && c <= 'z') um[c]++, count++;else if(c >= 'A' && c <= 'Z') um[c + 32]++, count++;}string res = "";for(string word : words) {if(word.size() < count) continue;unordered_map<char, int> um2(um);for(char c : word) {if(um2.count(c)) um2[c]--;}bool flag = true;for(auto p : um2) {if(p.second > 0) {flag = false;break;}}if(flag && ( res.empty() || word.size() < res.size() )) res = word;}return res;}
};

思路:

  1. 先遍历一次牌照licensePlate,记录下每个字母的个数(大写字母都按作小写来计数),存入哈希表um里;
  2. 然后依次遍历单词word,每遇到一个包含在um里的字母,就对um计数减1,遍历完当前单词后,检查是否um里的个数都小于1,若是则算是完整单词,用res记录下最短且最靠前的那个。

还可以有优化的空间,如果当前单词长度小于um中有效字母个数,它一定不是最小完整单词,可以跳过它。代码中使用了count计数,就是这个目的。

2019/07/01 21:23

http://www.taodudu.cc/news/show-3883993.html

相关文章:

  • LWC 63:748. Shortest Completing Word
  • Retry attempted 10 times without completing, bailing out解决
  • 阿里云-函数计算,Process exited unexpectedly before completing request,错误解决
  • Activity did not call finish() prior to onResume() completing原因和解决办法
  • C. Completing the Square
  • 文本省略
  • JS 三级目录
  • JS 图片局部放大
  • JS 弹跳球体
  • JS无缝轮播图
  • JS node通信
  • JQuery 五星评价
  • 寄生式组合继承
  • Vue.config常用配置项
  • JS实现拖拽 不出浏览器 距边50px吸附
  • Cookie、session和localStorage、以及sessionStorage之间的区别
  • 页面之间跳转传参数不使用cookie和url的方法,sessionStorage,localStorage
  • css引入外部字体的压缩方法,解决网页加载太慢
  • 陈楠说肝病:华佗村掌上中医院对乙肝康复有重大进展
  • java log 与system.out_为什么用log4j代替System.out.println
  • 计算机一级考试最难套题,计算机一级考试套题
  • 福师《计算机应用基础》期末考试a卷数据是,奥鹏福师2020年《计算机应用基础》期末试卷A卷2页.doc...
  • 目前大多数计算机采用的是,计算机专业 选择题8
  • 北语计算机基础知识作业1,北语20春《计算机基础》作业1【标准答案】
  • 计算机硬盘正在工作应特别注意避免,省二级计算机考试试题
  • CSS Part1
  • 快乐的Linux
  • Word操作习题之长文本排版、邀请函制作
  • 川大13秋《计算机应用基础0006》在线作业2,21年春[四川大学]《计算机应用基础0006》在线作业1(答案)...
  • 川大13秋《计算机应用基础0006》在线作业2,川大答案《计算机应用基础0006》考核作业1...

748. Shortest Completing Word相关推荐

  1. LWC 63:748. Shortest Completing Word

    LWC 63:748. Shortest Completing Word 传送门:748. Shortest Completing Word Problem: Find the minimum len ...

  2. 【Leetcode_easy】748. Shortest Completing Word

    problem 748. Shortest Completing Word 题意: solution1: class Solution { public:string shortestCompleti ...

  3. [leetcode] 748. Shortest Completing Word

    Description Find the minimum length word from a given dictionary words, which has all the letters fr ...

  4. 748. Shortest Completing Word(C++)

    原題 Find the minimum length word from a given dictionary words, which has all the letters from the st ...

  5. 【Leetcode】748. Shortest Completing Word

    题目地址: https://leetcode.com/problems/shortest-completing-word/ 给定一个长nnn的字符串sss和一个英文小写单词数组AAA,找到AAA中最短 ...

  6. 748. 最短补全词( Shortest Completing Word) 3ms做法心得

    做法大致就是将每个字符对应的ASCII码-'a'后存进数组,然后对照两个数组来求最优解. import java.util.Locale;//748. 最短补全词 public class Short ...

  7. C#LeetCode刷题-哈希表

    哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串   24.2% 中等 18 四数之和   ...

  8. Leetcode算法题-解法转载

    版权声明:本文为博主原创文章,未经博主允许不得转载.    https://blog.csdn.net/fuxuemingzhu/article/details/85112591 作者: 负雪明烛 i ...

  9. leetcode算法练习 JavaScript实现

    leetcode 表格内容由spider.js从leetcode-cn.com爬取. 已做题目答案也从leetcode-cn.com中爬取并生成文件. 解题进度:已解决 140/637 - 简单 94 ...

最新文章

  1. Java学习_day008面向对象(OOP):对象和类
  2. JavaScript中使用字符串调用函数
  3. 机房定期巡检报告报告,全面详实,可以参考
  4. Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略
  5. 【企业管理】围绕价值创造开展人力资源管理
  6. HashMap实现中文分词器
  7. PHP秒杀系统全方位设计分析--转载
  8. 跟我一起学.NetCore之MVC过滤器,这篇看完走路可以仰着头走
  9. 分步表单如何实现 html_HTML表格入门的分步指南
  10. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨向CEO汇报工作的人【难度中等】​
  11. 剑指offer系列48---左旋转字符串
  12. 使用java库中的对称加密算法
  13. mvp+dagger2_Android MVP + Dagger2 +改造+ RxJava
  14. Visual studio2010 编写dll 及 使用dll
  15. 微信小程序人脸识别认证-微信开放接口
  16. mysql 递归表的创建_Mysql创建递归型的存储过程_MySQL
  17. Excel宏批量转置并删除空格
  18. 世界所有国家的信息(2)
  19. Windows Vista 和 Windows Server 2008 在内存管理方面的功能增强(翻译)
  20. 用python画小仓鼠教程_小仓鼠简笔画教程

热门文章

  1. 数据仓库——数仓分层
  2. Pandas教程(pandas用法)
  3. 苹果版的ChatGPT官方Siri助手来了,立马体验
  4. 报销的费用要交个人所得税吗?
  5. 打开matlab的规则,matlab的函数和运算规则
  6. matlab滑块怎么插入,求助 Matlab关于滑块的一些问题
  7. R语言量化:KDJ指标的计算
  8. 19岁的少年发明一款机械计算器,载入史册
  9. 分享一个强大的makedown编辑器
  10. 上面两点下面一个三角形_三角形的中位线说课稿范文