题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
示例1
输入
abcdd
输出
dd
答案
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = null;
while ((input = br.readLine()) != null) {
int[] a = new int[127];
for (int i = 0; i < input.length(); i++) {
a[(int) input.charAt(i)]++;
}
int t = 0;
int min = 0;
for (int i = 0; i < 127; i++) {
if (a[i] != 0) {
min = i;
for(int j = i; j < 127; j++){
if (a[j] < a[min]&&a[j]!=0) {
min = j;
}
}
break;
}
}
replace(input, a, min);
}
}
private static void replace(String s, int[] a, int j) {
// TODO Auto-generated method stub
char[] c = s.toCharArray();
for(int i = 0; i < 127; i++){
if(a[i] == a[j]){
for(int k = 0; k < c.length; k++){
if((int)c[k] == i){
for(int x = k+1; x < c.length; x++){
c[x-1] = c[x];
}
c[c.length-1] = ' ';
}
}
}
}
System.out.println(c);
}
}
根据每个字符的ASCII码,统计每个字符的出现次数。找到出现次数最少的字母,然后依次删除字符串中出现次数与找到的次数最少的字母的次数相同的字符。