饶了一大圈,最终还是实现了,哈哈~~
思路:使用hashmap记录字符出现的次数,但是hashmap存取无序,只能使用list来进行顺序存储,输出时候,先使用hashmap迭代找到出现次数最小的字符,将出现此处最小的字符都存储到另一个list2集合,使用removeall将list集合中出现次数最少的字符都移除,然后遍历输出list集合中剩余的元素即可实现。
希望大佬可以帮忙指正进行优化,非常感谢!
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] arr = new String[20];
int i=0;
while (sc.hasNextLine()) {
String s= sc.nextLine();
if (s.equals("")) {
break;
}
arr[i] = s;
i++;
}
int min=Integer.MAX_VALUE;
for (int i1 = 0; (i1 < arr.length)&&(arr[i1]!=null); i1++) {
String s=arr[i1];
Map<Character, Integer> map = new LinkedHashMap<>();
List<Character> list=new ArrayList<>();
List<Character> list2=new ArrayList<>();
for (int i2 = 0; i2 < s.length(); i2++) {
if(map.containsKey(s.charAt(i2))){
map.put(s.charAt(i2),map.get(s.charAt(i2))+1);
}else{
map.put(s.charAt(i2), 1);
}
list.add(s.charAt(i2));
}
for (Integer val : map.values()) {
min=val>min?min:val;
}
Set<Map.Entry<Character, Integer>> set =map.entrySet();
Iterator<Map.Entry<Character, Integer>> it = set.iterator();
while (it.hasNext()) {
Map.Entry<Character, Integer> entry = it.next();
Character key = entry.getKey();
Integer val = entry.getValue();
if(val==min){
list2.add(key);
}
}
list.removeAll(list2);
for (int i2 = 0; i2 < list.size(); i2++) {
System.out.print(list.get(i2));
}
map.clear();
min=Integer.MAX_VALUE;
list.clear();
list2.clear();
System.out.println();
}
}
}


京公网安备 11010502036488号