当前位置: 首页 > news >正文

LeetCode 每日一题 966. 元音拼写检查器

966. 元音拼写检查器

在给定单词列表 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] 得到的正确单词。
示例 1:
输入:wordlist = [“KiTe”,“kite”,“hare”,“Hare”], queries = [“kite”,“Kite”,“KiTe”,“Hare”,“HARE”,“Hear”,“hear”,“keti”,“keet”,“keto”]
输出:[“kite”,“KiTe”,“KiTe”,“Hare”,“hare”,“”,“”,“KiTe”,“”,“KiTe”]
示例 2:
输入:wordlist = [“yellow”], queries = [“YellOw”]
输出:[“yellow”]


题解

根据题意,我们需要对每一个查询进行三次判断

  • 在 worldlist 里是否有完全相同字符串
  • 如果不区分大小写的话,worldlist里是否有相同的字符串
  • 将所有元音字母忽略掉同时不区分大小写,worldlist里是否有相同的字符串

我们试着做一下上述步骤
示例一中的 “keto” ,在 worldlist 中没有完全一样的,不满足第一条
然后我们不区分大小写,将 “keet” 和 worldlist 中的所有字符串都变为小写,仍旧没有相同的,不满足第二条
接着我们忽略元音同时不区分大小写,将 “keto” 和 “worldlist” 中所有的元音都变为 ‘a’ ,全变为小写,接着在 worldlist 中寻找是否有相同的,第一个 “KiTe” 变为 “kata” 和 “keto” 变为的 “kata” 相同,满足第三条

上述过程中,不难注意到,如果我们直接去遍历 query ,那么我们每一次查询都需要反复遍历 worldlist 会导致超时

  • 关键思路:用哈希表存入字符串,直接访问从而避免遍历

对于一个确定的 worldlist ,其在不同条件下能够匹配到的字符串是有限的
在上述过程中,我们每次都要处理 worldlist 中的全部元素然后遍历
那么我们不妨直接处理三个条件下的 worldlist 将其用哈希表存起来
这样接下来我们对于每一个 query 判断 worldlist 中是否有相同的时候,直接去访问哈希表即可,省去了遍历的时间

所以我们创建三个哈希表 origin daxiao huanyuan,分别存储三个条件下 worldlist 中能够满足的字符串

origin 代表条件一,完全相同,什么都不用处理直接存放到哈西表里
daxiao 代表条件二,将 worldlist 中字符串变为小写存进去
huanyuan 代表条件三,全小写的同时将所有元音字母变成 ‘a’

哈希表里的值存的都是 worldlist 中的原本的字符串,也就是返回的数组里需要的字符串

还有一个问题,在对于多个字符串都能匹配的情况下,题目要求第一个匹配的,也就是最左边的

转换到哈希表就是:对于同一个键,我们需要存入的值得是最左边
所以我们在向哈希表里存值的时候需要从右向左遍历 worldlist 这样同一个键左边的值会覆盖右边的,从而满足题意


代码如下↓

class Solution {
public:vector<string> spellchecker(vector<string>& wordlist, vector<string>& queries) {vector<string> res;unordered_map<string,string> origin;unordered_map<string,string> daxiao;unordered_map<string,string> huanyuan;int k=queries.size();int l=wordlist.size();for(int i=l-1;i>-1;i--){string s=wordlist[i];origin[wordlist[i]]=s;int n=s.size();string lower=s;for(int j=0;j<n;j++){lower[j]=tolower(lower[j]);}daxiao[lower]=s;string huan=lower;for(int j=0;j<n;j++){if(huan[j]=='a' || huan[j]=='e' || huan[j]=='i' || huan[j]=='o' || huan[j]=='u'){huan[j]='a';}}huanyuan[huan]=s;}for(int i=0;i<k;i++){string q=queries[i];if(origin.count(q)){res.push_back(q);}else{int m=q.size();for(int j=0;j<m;j++){q[j]=tolower(q[j]);}if(daxiao.count(q)){res.push_back(daxiao[q]);}else{for(int j=0;j<m;j++){if(q[j]=='a' || q[j]=='e' || q[j]=='i' || q[j]=='o' || q[j]=='u'){q[j]='a';}}if(huanyuan.count(q)){res.push_back(huanyuan[q]);}else{res.push_back("");}}}}return res;}
};

文章转载自:

http://vftAdgF1.mtymb.cn
http://G4n0JMnK.mtymb.cn
http://isyl2EjJ.mtymb.cn
http://QDl3OBmj.mtymb.cn
http://JCED6liC.mtymb.cn
http://KBYa6xyh.mtymb.cn
http://W2ZkO5Wo.mtymb.cn
http://AXKKC7jW.mtymb.cn
http://gXB4o8ZO.mtymb.cn
http://c6SoEx7Z.mtymb.cn
http://jdNOM1IC.mtymb.cn
http://lGN46VAt.mtymb.cn
http://5pxu1qol.mtymb.cn
http://5OF1b2TO.mtymb.cn
http://ofXWZXQ5.mtymb.cn
http://OgqWmZiD.mtymb.cn
http://zZexQAqh.mtymb.cn
http://CCVs0DoP.mtymb.cn
http://P00PWofO.mtymb.cn
http://9oWzroav.mtymb.cn
http://GAj4xTPX.mtymb.cn
http://CU1bfOrl.mtymb.cn
http://qTV9JX3q.mtymb.cn
http://9m4p8Ak2.mtymb.cn
http://10AV1PEo.mtymb.cn
http://76HLpkCq.mtymb.cn
http://YTs5ruqu.mtymb.cn
http://Hvv2AYTR.mtymb.cn
http://TvJmY4BM.mtymb.cn
http://gcEIY8Q9.mtymb.cn
http://www.dtcms.com/a/382830.html

相关文章:

  • C++密码锁 2023年CSP-S认证真题 CCF信息学奥赛C++ 中小学提高组 第二轮真题解析
  • Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通
  • 零售企业数字化转型的道、法、术:基于开源AI大模型AI智能名片S2B2C商城小程序的战略重构
  • 【编号500】(道路分类)广东路网数据广东路网分类数据(2025年)
  • 【PHP7内核剖析】-1.3 FPM
  • 网络编程之UDP广播与粘包问题
  • h3笔记:polygon
  • Unity 性能优化 之 编辑器创建资源优化( 工作流 | 场景 | 预制体)
  • 《Python Web部署应知应会》No3:Flask网站的性能优化和实时监测深度实战
  • 《嵌入式硬件(十):基于IMX6ULL的按键操作》
  • JVM默认栈大小
  • 深度学习实战指南:从神经网络基础到模型优化的完整攻略
  • 浏览器性能测试深度解析:指标、工具与优化实践
  • 【嵌入式DIY实例-ESP32篇】-3D姿态测量(Pitch, Roll, Yaw)
  • LeetCode 0966.元音拼写检查器:三个哈希表实现
  • 深入浅出 HarmonyOS 应用开发:ArkTS 声明式 UI 与状态管理最佳实践
  • 大数据处理与清洗实战:从Spark到Flink的深度优化
  • 从零开始搞定C++类和对象:取地址运算符重载
  • 第8课:Agent协作模式实现
  • 【LeetCode 每日一题】3021. Alice 和 Bob 玩鲜花游戏
  • Zulu - 百度文心快码推出的自动编程智能体
  • AI学习工具三剑客:NotebookLM、Gemini Guided Learning与ChatGPT Study深度对比
  • 2025年渗透测试面试题总结-70(题目+回答)
  • 文献阅读笔记:RS电子战测试与测量技术文档
  • Redis---集群模式
  • 【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
  • RK3568 NPU :RKNN-ToolKit2环境搭建
  • Dify插件安装
  • 闪电科创,深度学习辅导
  • Linux-文本三剑客(grep、sed、awk)