题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
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);
}
}