题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
import java.util.Scanner; import java.util.ArrayList; import java.util.Objects; import java.util.Comparator; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); ArrayList<String> dic = new ArrayList<>(); for(int i=0;i<n;i++){ dic.add(sc.next()); } String queryStr = sc.next(); int index = sc.nextInt(); ArrayList<String> broList = getBro(queryStr,dic); broList.sort(new Comparator<String>(){ @Override public int compare(String o1,String o2){ int n = Math.min(o1.length(),o2.length()); for(int i = 0;i<n;i++){ if(o1.charAt(i)!=o2.charAt(i)) return o1.charAt(i) - o2.charAt(i); } return o1.length() - o2.length(); } }); if(index<=broList.size()) System.out.println(broList.get(index-1)); } private static ArrayList<String> getBro(String s,ArrayList<String> list){ int[] hash1 = new int[27]; int length = s.length(); for(int i=0;i<length;i++){ hash1[s.charAt(i)-97]++; } ArrayList<String> result = new ArrayList<>(); for(String val: list){ int[] hash2 = new int[27]; if(val.length()!=length) continue; if(s.equals(val)) continue; for(int i=0;i<length;i++){ hash2[val.charAt(i)-97]++; } boolean isSame = true; for(int i=0;i<27;i++){ // isSame &= (hash1[i]==hash2[i]); // if(hash1[i]!=hash2[i]){ // isSame = false; // break; // } if(!(isSame &= (hash1[i]==hash2[i]))){ break; } } if(isSame){ result.add(val); } } System.out.println(result.size()); return result; } }
之前写过比较器排序 所以这题没啥太难的点。
判断是否兄弟,首先通过长度初判,长度不同,不可能是;题意上说自己不是自己兄弟,所以也提前判,避免不必要的操作。然后通过hash直接比较每个字母数量是不是一样的就ok了