题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
注意点:
- 兄弟单词的判断:若两个字符串长度相等且内容不同,则将两字符串转字符数组,排序后比较即可;也可用hash结构法。
- 兄弟单词是可以重复。 比如:输入[2 abc abc cba 1],则兄弟单词列表是[abc, abc],size是2。
- 坑:案例中有兄弟列表size是1,但是要求输出第3个兄弟单词的情况,就会报数组下标异常,所以在输出兄弟单词前加个条件即可。
import java.util.*;
public class HJ27查找兄弟单词 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String line = in.nextLine();
String[] orderStr = line.split(" ");
// 构建兄弟单词列表并打印列表大小
List wordList = new ArrayList();
int wordNum = Integer.parseInt(orderStr[0]);
for (int i = 1; i <= wordNum; i++)
if (checkBrother(orderStr[i], orderStr[orderStr.length - 2]))
wordList.add(orderStr[i]);
System.out.println(wordList.size());
// 按字典顺序排序后输出
if (!wordList.isEmpty()) {
wordList.sort(Comparator.naturalOrder());
int i = Integer.valueOf(orderStr[orderStr.length - 1]) - 1;
// 若超出数组下表则不输出(坑!)
if (i <= wordList.size() - 1)
System.out.println(wordList.get(i));;
}
}
}
/**
* 字符排序法
* 判断是否为兄弟单词
* @param str1
* @param str2
* @return
*/
public static boolean checkBrother(String str1, String str2) {
// 长度不相等或内容相等不是兄弟单词
if (str1.length() != str2. length() || str1.equals(str2))
return false;
// 排序比较
char[] chars1 = str1.toCharArray();
char[] chars2 = str2.toCharArray();
Arrays.sort(chars1);
Arrays.sort(chars2);
return Arrays.equals(chars1, chars2);
}
}

