1. 题目
读题
考查点
2. 解法
思路
判断兄弟单词的几种方法
- 方法一:排序比较。这种方法是将两个单词的字母排序后比较是否相同,如果相同,则说明两个单词是兄弟单词,否则不是。这种方法的优点是简单易懂,缺点是排序需要一定的时间开销。
- 方法二:哈希表记录。这种方法是使用哈希表来记录每个单词的字符集和字符频率,然后比较两个单词的哈希表是否相同,如果相同,则说明两个单词是兄弟单词,否则不是。这种方法的优点是避免了排序的时间开销,缺点是需要额外的空间来存储哈希表。
- 方法三:数组计数。这种方法是使用一个长度为26的数组来记录每个单词中每个字母出现的次数,然后比较两个单词的数组是否相同,如果相同,则说明两个单词是兄弟单词,否则不是。这种方法的优点是空间开销较小,缺点是需要遍历两次每个单词。
代码逻辑
具体实现
public class HJ027 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] str = sc.nextLine().split("\\s+");
int n = Integer.valueOf(str[0]);
String[] array = new String[n];
for (int i = 1; i <= n; i++) {
array[i - 1] = str[i];
}
String word = str[n + 1];
int k = Integer.valueOf(str[n + 2]);
findBrotherWord(array, word, k);
}
public static void findBrotherWord(String[] array, String word, int k) {
List<String> list = new ArrayList<>();
for (String cur : array) {
if (isBrother(word, cur)) {
list.add(cur);
}
}
System.out.println(list.size());
Collections.sort(list);
if (k < list.size()) {
System.out.println(list.get(k - 1));
}
}
public static boolean isBrother(String word, String curWord) {
if (word.length() != curWord.length() || word.equals(curWord)) {
return false;
}
return sort(word).equals(sort(curWord));
}
public static String sort(String word) {
char[] arr = word.toCharArray();
Arrays.sort(arr);
StringBuffer sb = new StringBuffer();
for (char c : arr) {
sb.append(c);
}
return sb.toString();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2022-07-14 Mysql字符串处理函数详细介绍、总结
2021-07-14 Java不定参数Object… obj 和 Object[] 的区别