✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. Java算法源码
- 5. 测试
- 6.解题思路
1. 题目描述
给定一个可存储若干单词的字典,找出指定单词的所有相似单词,并且按照单词名称从小到大排序输出。
单词仅包括字母,但可能大小写并存(大写不一定只出现在首字母)
。
相似单词说明:
给定一个单词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。
2. 输入描述
第一行为给定的单词个数N(N为非负整数);
从第二行到第N+1行是具体的单词(每行一个单词);
最后一行是指定的待检测单词(用于检测上面给定的单词中哪些是与该指定单词是相似单词,该单词可以不是上面给定的单词)
3. 输出描述
从给定的单词组中,找出指定单词的相似单词,并且按照从小到大字典序排列输出,中间以空格隔开;
如果不存在,则输出null(字符串null)。
4. Java算法源码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String[] words = new String[n];
for (int i = 0; i < n; i++) {
words[i] = scanner.next();
}
String targetWord = scanner.next();
List<String> similarWords = findSimilarWords(words, targetWord);
if (similarWords.isEmpty()) {
System.out.println("null");
} else {
Collections.sort(similarWords);
System.out.println(String.join(" ", similarWords));
}
}
private static List<String> findSimilarWords(String[] words, String targetWord) {
List<String> similarWords = new ArrayList<>();
for (String word : words) {
if (isSimilar(word, targetWord)) {
similarWords.add(word);
}
}
return similarWords;
}
private static boolean isSimilar(String word1, String word2) {
if (word1.length() != word2.length()) {
return false;
}
int[] count1 = new int[26];
int[] count2 = new int[26];
for (int i = 0; i < word1.length(); i++) {
char c1 = word1.charAt(i);
char c2 = word2.charAt(i);
if (c1 >= 'A' && c1 <= 'Z') {
count1[c1 - 'A']++;
} else {
count1[c1 - 'a']++;
}
if (c2 >= 'A' && c2 <= 'Z') {
count2[c2 - 'A']++;
} else {
count2[c2 - 'a']++;
}
}
for (int i = 0; i < 26; i++) {
if (count1[i] != count2[i]) {
return false;
}
}
return true;
}
5. 测试
6.解题思路
- 读取输入的单词个数
N
。 - 创建一个长度为
N
的字符串数组words
,并读取输入的单词。 - 读取输入的待检测单词
targetWord
。 - 创建一个空的字符串列表
similarWords
用于存储相似单词。 - 调用
findSimilarWords
方法,传入单词数组words
和待检测单词targetWord
,获取相似单词列表similarWords
。 - 如果
similarWords
列表为空,输出字符串 “null”。 - 否则,对
similarWords
列表进行字典序排序。 - 使用字符串连接方法将
similarWords
列表中的相似单词按空格连接成一个字符串,并输出。