【023·超时】966. 元音拼写检查器【逻辑转化 + 哈希表】
迪丽瓦拉
2024-05-20 14:10:53
0

在给定单词列表 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] 得到的正确单词。

https://leetcode.cn/problems/vowel-spellchecker/description/

  1. 把单词本身、小写形态、元音替换形态分别存到HashMap,然后进行查询
  2. 正则替换.replaceAll("[aeiou]", "*")():子表达式;[]:字符集
/** Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.*/package com.huawei.prac;import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;class Solution6th {public static void main(String[] args) {String[] wordlist = {"KiTe", "kite", "hare", "Hare"};String[] queries = {"kite", "Kite", "KiTe", "Hare", "HARE", "Hear", "hear", "keti", "keet", "keto"};System.out.println(Arrays.toString(spellchecker(wordlist, queries)));}/*** 966[超时]. 元音拼写检查器【逻辑转化 + 哈希表】* 把单词本身、小写形态、元音替换形态分别存到HashMap里面,然后进行查询即可** @param wordlist 单词数组* @param queries 待查询单词数组* @return 查询结果数组*/public static String[] spellchecker(String[] wordlist, String[] queries) {Set words = new HashSet<>();Map lowerMap = new LinkedHashMap<>();Map repMap = new LinkedHashMap<>();for (String word : wordlist) {words.add(word);lowerMap.putIfAbsent(word.toLowerCase(), word);repMap.putIfAbsent(word.toLowerCase().replaceAll("[aeiou]", "*"), word);}String[] checked = new String[queries.length];int index = 0;for (String word : queries) {if (words.contains(word)) {checked[index] = word;} else if (lowerMap.containsKey(word.toLowerCase())) {checked[index] = lowerMap.get(word.toLowerCase());} else {checked[index] = repMap.getOrDefault(word.toLowerCase().replaceAll("[aeiou]", "*"), "");}index++;}return checked;}
}

相关内容