题解 | #查找兄弟单词#
查找兄弟单词
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; } }