一、题目描述
给定一个可存储若干单词的字典,找出指定单词的所有相似单词,并且按照单词名称从小到大排序输出。
单词仅包括字母,但可能大小写并存(大写不一定只出现在首字母)。
相似单词说明:
给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,那么定义Y是X的相似单词,如abc、bca即为相似单词(大小写是不同的字母,如a和A算两个不同字母)。
字典序排序: 大写字母<小写字母。同样大小写的字母,遵循26字母顺序大小关系。即A<B<C<…<X<Y<Z<a<b<c<…<x<y<z。
如Bac<aBc<acB<cBa。
二、输入描述
第一行为给定的单词个数N(N为非负整数);
从第二行到第N+1行是具体的单词(每行一个单词);
最后一行是指定的待检测单词(用于检测上面给定的单词中哪些是与该指定单词是相似单词,该单词可以不是上面给定的单词);
三、输出描述
从给定的单词组中,找出指定单词的相似单词,并且按照从小到大字典序排列输出,中间以空格隔开;
如果不存在,则输出null(字符串null)。
四、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 单词个数N
int N = sc.nextInt();
// 从第二行到第N+1行是具体的单词
String[] words = new String[N];
for (int i = 0; i < N; i++) {
words[i] = sc.next();
}
// 最后一行是指定的待检测单词
String target = sc.next();
// 待检测单词按字典序排序
String targetAsc = sort(target);
List<String> sameList = new LinkedList<>();
for (int i = 0; i < N; i++) {
/**
* 1.将具体单词按字典序排序
* 2.和待检测单词比较
* 3.相似单词添加到sameList
*/
if (sort(words[i]).equals(targetAsc)) {
sameList.add(words[i]);
}
}
if (sameList.size() == 0) {
System.out.println("null");
return;
}
Collections.sort(sameList);
for (String s : sameList) {
System.out.print(s + " ");
}
}
/**
* 字典序排序
* <p>
* 大写字母<小写字母。同样大小写的字母,遵循26字母顺序大小关系。
*/
public static String sort(String a) {
char[] charArray = a.toCharArray();
Arrays.sort(charArray);
return new String(charArray);
}
五、效果展示
1、输入
5
nezha
neZha
study
java
zhane
zhane
2、输出
nezha zhane
3、说明
在给定的输入中,与zhane是兄弟单词的是nezha zhane ,且输出按照字典序大小排序,输出的所有单词以空格隔开。
🏆下一篇:华为OD机试真题 Java 实现【获得完美走位】【2023Q1 100分】
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。