本文共 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) { Listt1 = 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/