欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

华为 OD 真题机考 - 英文输入法(Java)

最编程 2024-09-30 09:04:38
...
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Autocomplete { public static void main(String[] args) { // String sentence = "The furthest distance in the world, Is not between life and death, But when I stand in front of you, Yet you dont know that I love you."; // prefix = "f"; Scanner scanner = new Scanner(System.in); String sentence = scanner.nextLine(); String prefix = scanner.nextLine(); System.out.println(autocomplete(sentence, prefix)); } /** * 根据给定的句子和前缀,提供一个自动补全的方法 * 该方法旨在从句子中提取出以给定前缀开头的单词,并按字母顺序排序后返回 * 如果没有找到以给定前缀开头的单词,则直接返回前缀本身 * * @param sentence 完整的句子,从其中提取单词 * @param prefix 需要自动补全的前缀 * @return 自动补全后的单词列表,以空格分隔;如果没有可补全的单词,则返回前缀本身 */ public static String autocomplete(String sentence, String prefix) { // 提取单词 List<String> words = extractWords(sentence); // 过滤并排序 List<String> filteredWords = filterAndSort(words, prefix); // 输出结果 if (!filteredWords.isEmpty()) { return String.join(" ", filteredWords); } else { return prefix; } } /** * 从句子中提取单词列表 * 该方法使用正则表达式来识别句子中的单词,并将其存储在列表中 * * @param sentence 待处理的句子 * @return 包含句子中所有单词的列表 */ private static List<String> extractWords(String sentence) { // 使用正则表达式提取单词 Pattern pattern = Pattern.compile("\\b[A-Za-z]+\\b"); // 创建匹配器 Matcher matcher = pattern.matcher(sentence); List<String> words = new ArrayList<>(); // 循环匹配 while (matcher.find()) { words.add(matcher.group()); } return words; } /** * 过滤并排序字符串列表 * 该方法用于接收一个字符串列表和一个前缀字符串,过滤出以该前缀开头的字符串列表,并对其进行排序 * * @param words 字符串列表,用于过滤和排序 * @param prefix 前缀字符串,用于确定过滤条件 * @return 返回过滤并排序后的字符串列表 */ private static List<String> filterAndSort(List<String> words, String prefix) { // 初始化一个新的字符串列表,用于存储过滤后的单词 List<String> filteredWords = new ArrayList<>(); // 遍历输入的字符串列表 for (String word : words) { // 检查当前单词是否以指定的前缀开头 if (word.startsWith(prefix)) { // 如果是,将其添加到过滤后的列表中 filteredWords.add(word); } } // 对过滤后的字符串列表进行排序 filteredWords.sort(String::compareTo); // 返回过滤并排序后的字符串列表 return filteredWords; } }