1. 题目

在给定单词列表 wordlist 的情况下,我们希望实现一个拼写检查器,将查询单词转换为正确的单词。

对于给定的查询单词 query,拼写检查器将会处理两类拼写错误:

  • 大小写:如果查询匹配单词列表中的某个单词(不区分大小写),则返回的正确单词与单词列表中的大小写相同。
例如:wordlist = ["yellow"], query = "YellOw": correct = "yellow"
例如:wordlist = ["Yellow"], query = "yellow": correct = "Yellow"
例如:wordlist = ["yellow"], query = "yellow": correct = "yellow"
  • 元音错误:如果在将查询单词中的元音(‘a’、‘e’、‘i’、‘o’、‘u’)分别替换为任何元音后,能与单词列表中的单词匹配(不区分大小写),则返回的正确单词与单词列表中的匹配项大小写相同。
例如:wordlist = ["YellOw"], query = "yollow": correct = "YellOw"
例如:wordlist = ["YellOw"], query = "yeellow": correct = "" (无匹配项)
例如:wordlist = ["YellOw"], query = "yllw": correct = "" (无匹配项)

此外,拼写检查器还按照以下优先级规则操作:

  • 当查询完全匹配单词列表中的某个单词(区分大小写)时,应返回相同的单词。
  • 当查询匹配到大小写问题的单词时,您应该返回单词列表中的第一个这样的匹配项。
  • 当查询匹配到元音错误的单词时,您应该返回单词列表中的第一个这样的匹配项。
  • 如果该查询在单词列表中没有匹配项,则应返回空字符串。

给出一些查询 queries,返回一个单词列表 answer,其中 answer[i] 是由查询 query = queries[i] 得到的正确单词。

示例:
输入:wordlist = ["KiTe","kite","hare","Hare"], queries = ["kite","Kite","KiTe","Hare","HARE","Hear","hear","keti","keet","keto"]
输出:["kite","KiTe","KiTe","Hare","hare","","","KiTe","","KiTe"]提示:
1 <= wordlist.length <= 5000
1 <= queries.length <= 5000
1 <= wordlist[i].length <= 7
1 <= queries[i].length <= 7
wordlist 和 queries 中的所有字符串仅由英文字母组成。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/vowel-spellchecker
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class Solution { //C++
public:vector<string> spellchecker(vector<string>& wordlist, vector<string>& queries) {// 元音集合unordered_set<char> vowel = {'a','e','i','o','u'};// 原始单词集合unordered_set<string> words(wordlist.begin(), wordlist.end());//转成小写后的单词 ---- 第一个出现的原始词unordered_map<string,string> upper_lower;//转小写且元音标为*  ----- 第一个出现的原始词unordered_map<string,string> vowel_mask;string s1, s2;int i = 0, idx = 0;for(auto& w : wordlist){words.insert(w);s1 = s2 = w;for(i = 0; i < w.size(); i++){if(isupper(s1[i])){s1[i] += 32;//转小写s2[i] += 32;}if(vowel.count(s2[i]))s2[i]='*';}if(!upper_lower.count(s1))upper_lower[s1] = w;if(!vowel_mask.count(s2))vowel_mask[s2] = w;}vector<string> ans(queries.size(),"");for(auto& q : queries){if(words.count(q))ans[idx] = q;else{s1 = s2 = q;for(i = 0; i < q.size(); i++){if(isupper(s1[i])){s1[i] += 32;//转小写s2[i] += 32;}if(vowel.count(s2[i]))s2[i]='*';}if(upper_lower.count(s1))ans[idx] = upper_lower[s1];else if(vowel_mask.count(s2))ans[idx] = vowel_mask[s2];}idx++;}return ans;}
};

144 ms 29.1 MB

LeetCode 966. 元音拼写检查器(哈希)相关推荐

  1. 966. 元音拼写检查器

    在给定单词列表 wordlist 的情况下,我们希望实现一个拼写检查器,将查询单词转换为正确的单词. 对于给定的查询单词 query,拼写检查器将会处理两类拼写错误: 大小写:如果查询匹配单词列表中的 ...

  2. 介绍 Java 平台的 Jazzy:一种新的拼写检查器 API

    计算机擅长执行快速搜索操作,可以根据给定的搜索词,对大量存储的信息快速进行搜索.但是,拼写检查应用程序所要求的搜索能力,不仅仅是正确的字符串匹配.在这篇文章中,我将介绍搜索算法的一些历史,包括语音匹配 ...

  3. 怎样写一个拼写检查器-贝叶斯-python

    怎样写一个拼写检查器 Peter Norvig 翻译: Eric You XU 原版:http://norvig.com/spell-correct.html 翻译:http://blog.youxu ...

  4. 【ZT】怎样写一个拼写检查器

    这篇真的写的很棒,用心领会吧! 怎样写一个拼写检查器 Peter Norvig 翻译: Eric You XU 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快 ...

  5. 拼写检查器的编写[转]

    http://blog.youxu.info/spell-correct.html 怎样写一个拼写检查器 Peter Norvig 翻译: Eric You XU 上个星期, 我的两个朋友 Dean ...

  6. Python写一个简洁拼写检查器

    网上看到的一篇神文,利用的是朴素贝叶斯模型实现了一个简单的拼写检查器. 英文原文链接见这里,中文翻译如下 =============================================== ...

  7. 如何写一个拼写检查器-by Peter Norvig

    本文原著:Peter Norvig  中文翻译:徐宥 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快速高质量的拼写检查工具感到惊奇. 比如说在搜索的时候键入 ...

  8. 如何写一个拼写检查器—Peter Norvig 中文翻译:徐宥

    [转]如何写一个拼写检查器 本文原著:Peter Norvig  中文翻译:徐宥 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快速高质量的拼写检查工具感到惊奇 ...

  9. 20来行的Python拼写检查器

    近来Google的人工智能围棋机器人AlphaGo击败了欧洲围棋冠军樊麾二段(原中国国少队队员),引起了围棋界的轩然大波.AlphaGo采用的是机器学习加上蒙特卡洛算法的方式.蒙特卡洛算法早有研读,而 ...

最新文章

  1. R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)
  2. hibernate映射一对多双向关联关系实例
  3. Chrome 浏览器调试移动端
  4. 2020年哪个pe启动盘干净好用_2020年电压力锅哪个牌子好用又安全?电压力锅什么样的品牌好?每月更新!...
  5. 六大Web负载均衡原理与实现
  6. 简单英文题 16 Maximum Sum Not Exceeding K(python)
  7. python兼容js base64_前端base64编码的坑
  8. Oracle安装-------实例化EM 配置文件时出错问题 ( 转 )
  9. java安装选择哪个可选功能_java章节习题及期末考试题答案.doc
  10. 分享基于silverlight的一个大文件上传控件
  11. GEE学习笔记3:Landsat8 植被指数计算
  12. 微信支付宝支付开发文档
  13. UI设计中有哪些常见的风格?
  14. IRedMail 邮箱配置
  15. 用新华字典来彻底解释清:数据库索引到底是什么
  16. 实习僧网站字体反爬破解思路及步骤分享
  17. 搞懂异地多活,看这篇就够了
  18. Android 调用so库全过程
  19. 计算机毕业设计ssm客房订餐系统s2whx系统+程序+源码+lw+远程部署
  20. 计算机领域8月SCI/EI期刊列表已更新,是你在找的1区TOP审稿快刊吗?

热门文章

  1. 电脑开机3秒就重启循环_电脑修好后客户不愿支付上门费,行,那电脑开机60秒自动关机吧!...
  2. C++静态成员函数指针
  3. 网络请求数据解析时,判断数据是否为空
  4. java 线程池 wait,Java 多线程 之 wait等待 线程实例
  5. c++远征之继承篇——继承的概念、继承时构造函数/析构函数的先后顺序
  6. 内核启动的C语言阶段——start_kernel函数
  7. mysql操作常用技巧
  8. Vmware由于centos升级内核不可运行(C header files matching your running kernel were not found)的解决方案...
  9. VBA学习_5:流程控制
  10. 双重检查锁实现单例模式的线程安全问题