✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: 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
列表中的相似单词按空格连接成一个字符串,并输出。