思路:1.把目标字符串分解成char放入list集合中。
2.把字符串数组中的字符串依次与目标字符串比较。
1)如果当前字符串的当前字符在list集合中存在,那么删除list集合中的该字符。当当前字符串的最后一个字符比较完并且list集合为空,那么将当前字符串加入out集合中。
2)若不存在则break,进行下一个字符串的比较。
3.对out集合进行排序。
4.输出out集合的长度
5.若k<=out的长度,则输出。否则不输出。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
ArrayList<String> out=new ArrayList<>();//收集兄弟字符串
int n = in.nextInt();
String[] strs=new String[n];
for(int i=0;i<n;i++){
strs[i]=in.next();
}
String target=in.next();//目标字符串
int k=in.nextInt();
ArrayList<Character> list=new ArrayList<>();//存放目标字符串的字符
for(int i=0;i<target.length();i++){
list.add(target.charAt(i));
}
for(int j=0;j<strs.length;j++){//遍历字符串数组
if(!target.equals(strs[j])){//去除与目标字符串一样的字符串
ArrayList<Character> tmp=new ArrayList<>(list);//因为涉及到集合的remove,每次都需要从list取。
for(int m=0;m<strs[j].length();m++){//遍历当前字符串
int index=tmp.indexOf(strs[j].charAt(m));
if(index!=-1){//若当前字符串的当前字符在集合中存在
tmp.remove(index);
if(m==strs[j].length()-1 && tmp.isEmpty()){//若遍历到最后一个字符,且list也为空。
out.add(strs[j]);
break;
}
}else{//不存在,直接进行下一个字符串比较
break;
}
}
}
}
Collections.sort(out);//排序
System.out.println(out.size());
if(k<=out.size()){
System.out.println(out.get(k-1));
}
}
}
京公网安备 11010502036488号