题解 | 查找兄弟单词
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String sum = in.nextLine();//获取总输入
String[] sarr = sum.split(" ");//通过空格切割输入
int n = Integer.parseInt(sarr[0]);//获取数量
int k = Integer.parseInt(sarr[sarr.length-1]);//获取取第几小的值
List<String> res = new ArrayList<>();//用于存放结果值
//开始循环判断是否要放进兄弟串中
for(int i = 1;i<=n;i++){
if(sarr[i].length()!=sarr[n+1].length()){ //判断两个长度是否相同
continue;
}
if(sarr[i].equals(sarr[n+1])){ // 判断两个值是否相同
continue;
}
int flag = 1; // 用于记录该字符是否为兄弟字串的flag
String a = sarr[i]; //满足上面条件的字串
String b = sarr[n+1];//x
char[] as = a.toCharArray();
char[] bs = b.toCharArray();
Arrays.sort(as);//排序方便每个依次对应
Arrays.sort(bs);
for(int j = 0;j<sarr[n+1].length() ;j++){
if(as[j]!=bs[j]){ //挨个对比,因为排了序,如果不同就不是兄弟串,全部通过 flag不变 则是兄弟串
flag = 0;
break;
}
}
if(flag==1){
res.add(sarr[i]); //判断通过 添加到兄弟串中
}
}
Collections.sort(res); //通过Collections 对 arraylist 排序
System.out.println(res.size());
if(res.size()>=k){ // 需要判断是否超过,第k小对应 k-1的序列
System.out.println(res.get(k-1));
}
}
}
}
查看24道真题和解析