描述
对于给定的仅由小写字母构成的字符串,删除字符串中出现次数最少的字符。输出删除后的字符串,字符串中其它字符保持原来的顺序。
特别地,若有多个字符出现的次数都最少,则把这些字符都删除。
特别地,若有多个字符出现的次数都最少,则把这些字符都删除。
输入描述:
在一行上输入一个长度为 1≦length(s)≦20 ,仅由小写字母构成的字符串 s ,代表待处理的字符串。
输出描述:
在一行上输出一个字符串,代表删除后的答案。保证这个字符串至少包含一个字符。
解法一(java):
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
// while (in.hasNextInt()) { // 注意 while 处理多个 case
// int a = in.nextInt();
// int b = in.nextInt();
// System.out.println(a + b);
// }
String str = in.nextLine();
int len = str.length();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0 ; i < len ; i++) {
int key = str.charAt(i);
if (map.containsKey(key)) {
map.put(key, map.get(key) + 1);
} else {
map.put(key, 1);
}
}
Set<Integer> keys = new HashSet<>();
Integer value = 21;
for (Integer k : map.keySet()) {
Integer v = map.get(k);
if (value > v) {
value = v;
}
}
for (Integer k : map.keySet()) {
Integer v = map.get(k);
if (value == v) {
keys.add(k);
}
}
String result = str;
for (int key : keys) {
char replace = (char)key;
result = result.replaceAll(String.valueOf(replace), "");
}
System.out.println(result);
}
}
思路:遍历,通过一个map保存出现字符的数量,然后找出map中出现次数最少的键,然后通过字符串替换的方式删除对应的字符即可。