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