博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode算法题——单词拼写检查器
阅读量:3958 次
发布时间:2019-05-24

本文共 2234 字,大约阅读时间需要 7 分钟。

题目

在给定单词列表 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.先比较直接相同的,并在结果集合里记下值,在原集合把它remove掉
    2.然后转成大写,有相同的就循环结束,并记下它的下标索引值,并在结果集合里记下值,在原集合把它remove掉
    3.比较元音错误的(转成大写),遍历单词时,如果它charat的不等值和那个单词的charat都在aeiou集合中,
    并记下它的下标索引值,并在结果集合里记下值,在原集合把它remove掉
    利用结果集合和下标索引,单词集合输出查询结果

[解决问题]

    1.不能用集合记录下标,要用map,因为在t2遍历内层遍历t1时要同时记下t2和t1的两个下标索引,并把t2的下标当做key(唯             一,也是为了第二次的循环判断条件)
    2.不能remove,因为它会改变集合的下标,使在map里放置的索引对应关系出错
    3.解决方法:在转换大写后的循环里,使用map的key作为判断条件,如果keys里已经有t2这个索引了,就让它跳过这个循环
       如果没有且equals相等,map记录下索引
    4.优化:直接在else里放置第三个判断条件,首先两个单词长度相等,并且它们的charAt的所有不同元素都为a,e,i,o,u的其        中一个(集合判断) 记录下它的值
    5.最后利用索引map集和单词数组把所有查询结果放入集合中,查询不到的add(""),打印

 

代码实现

public class demo {		public static void wordlist(String[] wordlist,String[] queries) {				List
t1 = new ArrayList<>(); List
t2 = new ArrayList<>(); Map
map = new HashMap<>(); for(int i=0;i
judge = new ArrayList<>(); List
apple = new ArrayList<>(); judge.add('A'); judge.add('E'); judge.add('I'); judge.add('O'); judge.add('U'); for(int i=0;i
result = new ArrayList<>(); for(int i=0;i

 

    

转载地址:http://yiazi.baihongyu.com/

你可能感兴趣的文章
shell脚本死循环方法
查看>>
shell中$*和$@的区别
查看>>
log4cxx 的编译安装过程和使用
查看>>
简单邮件系统程序
查看>>
STL里的multimap使用详解
查看>>
STL 库其中的 std::string用法总结
查看>>
模态对话框的销毁过程与非模态对话的几种销毁方法
查看>>
C++实现http下载 && 24点计算编码风格
查看>>
memcached了解使用和常用命令详解
查看>>
GDB调试各功能总结
查看>>
"undefined reference to" 多种可能出现的问题解决方法
查看>>
类结构定义
查看>>
Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
查看>>
图像处理基本算法(汇总)以及实现
查看>>
C++编程获取本机网卡信息 本机IP 包括Windows和Linux
查看>>
23种设计模式详解及C++实现
查看>>
C++连接CTP接口实现简单量化交易
查看>>
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>