题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.next(); //用list集合保存原始的字符串用来后续删除出现次数最少的字符 ArrayList<Character> list = new ArrayList<>(); //map集合用来记录各个字符出现的次数 Map <Character,Integer> map = new LinkedHashMap(); //遍历字符串添加到list和map for(int i=0;i<str.length();i++){ Character substr = str.charAt(i); list.add(substr); if(!map.containsKey(substr)){ map.put(substr,1); }else{ map.put(substr,map.get(substr)+1) ; } } //拿到最小的出现次数(可能不止一个字符) Character minkey=list.get(0); Set<Character> keyset = map.keySet(); int minvalue = map.get(minkey); for(Character tempkey:keyset){ int value = map.get(tempkey); if(value<minvalue){ minvalue = value; minkey=tempkey; } } //把要删除的字符添加到removelist集合 ArrayList<Character> removelist = new ArrayList<>(); for(Character tempkey:keyset){ if(map.get(tempkey)==minvalue){ removelist.add(tempkey); } } //用removeall方法传入removelist参数删除list集合中出现次数最少的字符 list.removeAll(removelist); //使用StringBuilder把list集合里的字符连接成字符串返回 StringBuilder result = new StringBuilder(); for (Character c : list) { result.append(c); } System.out.println(result); } }