题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String str = in.next(); String result = removeMinCharacter(str); System.out.println(result); } } public static String removeMinCharacter(String str){ Set<Character> targetCharacterSet = obtainMinCharacter(str); return removeTargetCharacter(str,targetCharacterSet); } public static Set<Character> obtainMinCharacter(String str){ Map<Character,Integer> map = groupByCharacter(str); return doObtainMinCharacter(map); } public static Set<Character> doObtainMinCharacter(Map<Character,Integer> map){ Set<Character> targetCharacterSet = new HashSet<>(); int minValue = Integer.MAX_VALUE; Set<Character> keys = map.keySet(); for (Character key : keys) { int value = map.get(key); if (value <= minValue){ minValue = value; } } for (Character key : keys) { int value = map.get(key); if (value == minValue){ targetCharacterSet.add(key); } } return targetCharacterSet; } public static Map<Character,Integer> groupByCharacter(String str){ char[] charArr = str.toCharArray(); Map<Character,Integer> map = new HashMap<>(); for(int i = 0;i < charArr.length; i++){ int value = map.getOrDefault(charArr[i],0); ++ value; map.put(charArr[i],value); } return map; } public static String removeTargetCharacter(String str,Set<Character> targetCharacterSet){ String result = str; for (Character targetCharacter : targetCharacterSet){ result = result.replaceAll(String.valueOf(targetCharacter),""); } return result; } }