题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
基础的解法,基本上没有什么设计而言。
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.nextLine(); char[] charArr = s.toCharArray(); // 统计字符串里的各字符出现的次数 Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < charArr.length; i++) { map.put(charArr[i], map.getOrDefault(charArr[i], 1) + 1); } // 获取出现次数最少的字符集合 int min = 99; List<Character> minChar = new ArrayList<>(); for (char c : map.keySet()) { int count = map.get(c); if (count < min) { min = count; minChar.clear(); minChar.add(c); } else if (count == min) { minChar.add(c); } } // 输出 for (int i = 0; i < charArr.length; i++) { if (!minChar.contains(charArr[i])) { System.out.print(charArr[i]); } } } }
推荐一篇赞最高的代码,思路很不错
import java.util.Collections; import java.util.HashMap; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String s = scanner.nextLine(); char[] chars = s.toCharArray(); //统计每个字母的数量 HashMap<Character, Integer> map = new HashMap<>(); for (char aChar : chars) { map.put(aChar, (map.getOrDefault(aChar, 0) + 1)); } //找到数量最少的字符数量 Collection<Integer> values = map.values(); Integer min = Collections.min(values); //用空字符串替换该字母 for (Character character : map.keySet()) { if (map.get(character) == min){ s = s.replaceAll(String.valueOf(character), ""); } } System.out.println(s); } } }