lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

读题

HJ27 查找兄弟单词 

 

考查点

 

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();

}
}

3. 总结

posted on 2023-07-14 22:17  白露~  阅读(67)  评论(0编辑  收藏  举报