华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
主管期望你来实现英文输入法单词联想功能。
依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。
0 < word.length() <= 20
0 < str.length <= 10000
0 < pre <= 20
输出符合要求的单词序列或单词前缀,存在多个时,单词之间以单个空格分割。
这道题很简单,就是题述有点复杂,多读几遍,理解透彻就好办了。
package com.guor.od;
import java.util.*;
public class OdTest02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 首行输入一段由英文单词word和标点符号组成的语句str
String words = scanner.nextLine();
// 英文单词前缀pre
String pre = scanner.nextLine();
words = words.replaceAll("\\s+", " ")// 去掉连续空格
.replaceAll("[^A-Za-z’ ]", "")//将非字母、’、空格的所有数字、字符去掉
.replaceAll("\\s+", " ");// 再次去掉因为某种原因产生的连续空格
System.out.println(words);
// 按空格拆分
List<String> list = Arrays.asList(words.split(" "));
// 匹配的单词集合
ArrayList<String> matchList = new ArrayList<>();
String special = "’";
for (String word : list) {
// 如果是特殊字符串(包含’),将其进行拆分成多个字符串
if(word.contains(special)){
String[] splitArr = word.split(special);
for (String s : splitArr) {
// 匹配的单词
if(s.startsWith(pre)){
matchList.add(s);
}
}
}else {
// 匹配的单词
if(word.startsWith(pre)){
matchList.add(word);
}
}
}
// 匹配的单词
System.out.println(matchList);
// 按字典表排序
Collections.sort(matchList, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
// 如果联想不到,请输出用户输入的单词前缀
if(matchList.size() == 0){
System.out.println(pre);
return;
}
StringBuilder builder = new StringBuilder();
// 输出符合要求的单词序列或单词前缀,存在多个时,单词之间以单个空格分割
for(int i=0;i<matchList.size()-1;i++){
builder.append(matchList.get(i)).append(" ");
}
builder.append(matchList.get(matchList.size()-1));
System.out.println(builder);
}
}
Nezha loves learning Java、J2’ee, 666 //Don’t ‘JJ JIS J’ believe 。、in Nezha。
J
J JIS JJ JavaJee
下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。