题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
输入
abcdd
输出
dd
这里需要注意ArrayList.remove()的用法,有坑:
1、使用remove(index)时记得index是从大到小排列的,不然会造成乱序,直接移除remove(对象)更安全
2、如果传入的参数是Integer的话要先变成int
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
char[] s1 = sc.nextLine().toCharArray();
ArrayList<String> list1 = new ArrayList<String>();
for(int k =0 ;k<s1.length;k++){
//单个字符转字符串,要用String.valueOf
list1.add( String.valueOf(s1[k]));
}
//统计每个字符出现的次数
int [] t = new int[ list1.size()];
for (int i =0;i<list1.size();i++){
for (int j = 0;j<list1.size();j++){
if(list1.get(i).equals(list1.get(j))){
t[i] =t[i]+1;
}
}
}
//找出出现的最小次数
int index = 0;
int tmp = t[0];
for (int i =1;i<t.length;i++){
if(t[i]<tmp){
tmp = t[i];
}
}
ArrayList<Integer> list = new ArrayList<Integer>();
// list.add(index);
//找出跟最小次数相同的,记录下标
for (int j=0;j<t.length;j++){
if(t[j] == tmp){
//保存下标
list.add(j);
}
}
//将出现最小次数的下标进行排序
Collections.sort(list);
for(int p = list.size()-1;p>=0;p--){
int q = list.get(p);
list1.remove(q);
}
for(int i=0;i<list1.size()-1;i++){
System.out.print(list1.get(i));
}
System.out.println(list1.get(list1.size()-1));
}
}
}