题目描述

  • 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
    注意每个输入文件有多组输入,即多个字符串用回车隔开
  • 输入描述:
    字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
  • 输出描述:
    删除字符串中出现次数最少的字符后的字符串。
  • 示例1
    输入
    abcdd
    aabcddd
  • 输出
    dd
    aaddd

代码思路

利用数组或者map记录字符出现的次数

public class Huawei删除字符串中出现次数最少的字符 {

/**
* 第一种
* 利用map计算每个字符出现的次数,然后计算最少的次数,再输出
*/
// public static void main(String[] args) throws IOException {
// BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// String str = null;
// StringBuilder builder = new StringBuilder();
// while (!(str = reader.readLine()).equals("")) {
// char[] chars = str.toCharArray();
// Map<Character, Integer> map = new HashMap<>();
// int min = 20;
// for (int i = 0; i < chars.length; i++) {
// int max = map.getOrDefault(chars[i], 0) + 1;
// map.put(chars[i], max);
// }
// for (Map.Entry<Character, Integer> entry : map.entrySet()) {
// Integer value = entry.getValue();
// if (value<min){
// min=value;
// }
// }
//
// for (int j=0;j<chars.length;j++) {
// Integer v = map.get(chars[j]);
// if (v != min) {
// builder.append(chars[j]);
// }
// }
// builder.append("\n");
// }
// System.out.println(builder.toString());
// }


/**
* 第二种
* 利用数组计算每个字符出现的次数。
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = null;
StringBuilder builder = new StringBuilder();
while (!(str = reader.readLine()).equals("")) {
char[] chars = str.toCharArray();
int[] charArr = new int[26];
int min = 20;
for (int i = 0; i < chars.length; i++) {
charArr[chars[i] - 'a']++;
}

for (int index : charArr) {
if (index > 0 && index < min) {
min = index;
}
}
for (Character i : chars) {
if (charArr[i - 'a'] != min) {
builder.append(i);
}
}

builder.append("\n");
}
System.out.println(builder.toString());
}
}