题解 | #查找兄弟单词#
查找兄弟单词
http://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int n = scanner.nextInt();
String[] str = new String[n];
for (int i = 0; i <n ; i++) {
str[i] = scanner.next();
}
String ob = scanner.next();
int k = scanner.nextInt();
//int length = ob.length();
// 找到所有兄弟单词
List<String> list = new ArrayList<>();
for (int i = 0; i <str.length ; i++) {
String p = str[i];
// 和原单词一样,则跳过
if (ob.equals(p)){
continue;
}
// 判断是否是兄弟单词
if (selectBrother(p,ob)){
list.add(p);
}
}
// 给兄弟们排个序
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
for (int i = 0; i < o1.length()-1; i++) {
if (o1.charAt(i)!=o2.charAt(i)){
return o1.charAt(i)-o2.charAt(i);
}
}
return 0;
}
});
int size = list.size();
System.out.println(size);
if (k<=size){
System.out.println(list.get(k-1));
}
}
}
private static boolean selectBrother(String p,String ob) {
if (ob.length()!=p.length()){
return false;
}
// 定义一个map存放26个字母
int[] map = new int[26];
for (char c:ob.toCharArray()) {
map[c-'a']++;
}
for (char c:p.toCharArray()) {
map[c-'a']--;
if (map[c-'a']<0){
return false;
}
}
return true;
}
}
