饶了一大圈,最终还是实现了,哈哈~~
思路:使用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(); } } }