ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

966 元音拼写检查器

2021-01-19 22:00:11  阅读:293  来源: 互联网

标签:wordlist 966 ch 拼写 单词 字符串 mp 元音 查询


题目描述:
在给定单词列表 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 中的所有字符串仅由英文字母组成。

方法1:
主要思路:解题汇总链接
(1)将原来的单词列表转为三个哈希,第一个哈希存储单词列表中的原始单词,第二个哈希存储单词列表中的单词转化为对应的统一的小写的字符串,第三个哈希存储对应的小写字符串中,各个元音字符转为‘’字符的字符串;
(2)转换过程中注意第一次第一次匹配的条件;
(3)对于要插叙的字符串,先使用第一个哈希,若匹配上,则直接压入对应的字符串;
(4)否则,将查询字符串转为对应的小写字符串,再使用第二个哈希进行查询,存在,压入对应的字符串;
(5)否则,将转换的小写字符串中对应的可能存在原因字符转为 ‘
’,进行查询,存在,压入对应的字符串;
(6)否则,将空字符串压入;

class Solution {
public:
    vector<string> spellchecker(vector<string>& wordlist, vector<string>& queries) {
        unordered_set<string> st;//存储原字符串
        unordered_map<string,int> mp_1;//存储对应的小写字符串
        unordered_map<string,int> mp_2;//存储对应的小写字符串中的原因字符转为‘*’的字符串
        for(int i=0;i<wordlist.size();++i){
            st.insert(wordlist[i]);//存储原始字符串
            string little_str=wordlist[i];
            for(char&ch:little_str){//转为对应的小写字符串
                if(ch>='A'&&ch<='Z'){
                    ch+='a'-'A';
                }
            }
            if(mp_1.count(little_str)==0){//存储对应的小写字符串
                mp_1[little_str]=i;
            }
            for(char&ch:little_str){//转换小写字符串中的元音字符
                if(ch=='a'||ch=='e'||ch=='i'||
                    ch=='o'||ch=='u'){
                    ch='*';
                }
            }
            if(little_str!=wordlist[i]&&mp_2.count(little_str)==0){//存储转换元音字符后的字符串
                mp_2[little_str]=i;
            }
        }
        vector<string> res;
        for(string&q:queries){
            if(st.count(q)){//查询原字符串
                res.push_back(q);
            }
            else{
                for(char&ch:q){
                    if(ch>='A'&&ch<='Z'){
                        ch+='a'-'A';
                    }
                }
                string tmp=q;
                for(char&ch:tmp){
                    if(ch=='a'||ch=='e'||ch=='i'||
                        ch=='o'||ch=='u'){
                        ch='*';
                    }
                }
                if(mp_1.count(q)){//查询小写字符串
                    res.push_back(wordlist[mp_1[q]]);
                }
                else if(mp_2.count(tmp)){//查询转换元音字符后的字符串
                    res.push_back(wordlist[mp_2[tmp]]);
                }
                else{
                    res.push_back("");
                }
            }
        }
        return res;
    }
};

标签:wordlist,966,ch,拼写,单词,字符串,mp,元音,查询
来源: https://blog.csdn.net/weixin_44171872/article/details/112852848

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有