神州数码笔试:删除出现次数最少的字符

题目描述:

输出一个字符串(只有大写和小写字母),删除其中出现次数最少的字符。
如果有多个字符出现的次数都最少,那么就把它们都删了。

比如:输出aaaabbb,输出aaaa

import java.util.*;

public class Main

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String line = sc.nextLine();
int len = line.length();

// 统计每个字符出现的次数
int[] arr = new int[52];
for(int i = 0; i < len; i++) {
char c = line.charAt(i);
int index = 0;
if(c >= 'a' && c <= 'z') {
index = c - 'a' + 26;
arr[index]++;
}else if(c >= 'A' && c <= 'Z'){
index = c - 'A';
arr[index]++;
}
}

// 找到出现次数的最小值
int min = Integer.MAX_VALUE;
for(int i = 0; i < arr.length; i++) {
if(arr[i] > 0) {
min = Math.min(min, arr[i]);
}
}

// 如果出现次数大于最小值,就加到sb中
StringBuilder sb = new StringBuilder();
for(int i = 0; i < len; i++) {
char c = line.charAt(i);
if(c >= 'a' && c <= 'z' && arr[c-'a'+26] > min) {
sb.append(c);
}else if(c >= 'A' && c <= 'Z' && arr[c-'A'] > min){
sb.append(c);
}
}
System.out.println(sb.toString());

}
sc.close();
}
}