神州数码笔试:删除出现次数最少的字符
原创
©著作权归作者所有:来自51CTO博客作者mb6304a73bed12a的原创作品,请联系作者获取转载授权,否则将追究法律责任
神州数码笔试:删除出现次数最少的字符
题目描述:
输出一个字符串(只有大写和小写字母),删除其中出现次数最少的字符。
如果有多个字符出现的次数都最少,那么就把它们都删了。
比如:输出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();
}
}