题解 | #查找兄弟单词#
查找兄弟单词
http://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
List<String> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(scan.next().toString());
}
String str = scan.next().toString();
int index = scan.nextInt();
int[] arr = new int[53];
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 'a' && c <= 'z') arr[c - 'a']++;
else arr[c - 'A' + 26]++;
}
List<String> brother = new ArrayList<>();
for (String s : list) {
//要排除长度不同 或者是完全一样的
if (s.length() != str.length() || s.equals(str)) continue;
if (isValid(s, arr)) brother.add(s);
}
Collections.sort(brother);//字典序升序
System.out.println(brother.size());
if (index - 1 < brother.size() && index - 1 >= 0) {
//越界就不输出
System.out.println(brother.get(index - 1));
}
}
}
/**
* 用来判度 两个字符串是否含有相同元素
*/
public static boolean isValid(String s, int[] a) {
int[] arr = a.clone();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'a' && c <= 'z') {
if (arr[c - 'a'] <= 0) return false;
arr[c - 'a']--;
}else {
if (arr[c - 'A' + 26] <= 0) return false;
arr[c - 'A' + 26]--;
}
}
for (int i : arr) {
if (i != 0) return false;
}
return true;
}
}