这道题有点坑的地方是,输出的类型也会检查。不能是视觉上对的上就行。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
/**
* @author chaoxi
* @create 2021-07-25 10:40
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
while(s!=null && s.length()!=0){
delmin(s);
s = br.readLine();
}
}
public static void delmin(String string){
char[] chars = string.toCharArray();
char[] temp_char=new char[chars.length];
for (int w = 0; w <chars.length ; w++) {
temp_char[w]=chars[w];
}
Arrays.sort(chars);
string=String.valueOf(chars);
HashSet<String> strings = new HashSet<>();
for (int i = 0; i < chars.length; i++) {
strings.add(String.valueOf(chars[i]));
}
Iterator<String> iterator = strings.iterator();
int[] num_char = new int[strings.size()]; //定义一个数组用于存储每个字符的个数
int i =0;
while (iterator.hasNext()){
String subString =iterator.next();
num_char[i] = string.lastIndexOf(subString) - string.indexOf(subString) +1;
i++;
}
int[] newnum_char= new int[num_char.length];
// System.out.println(newnum_char.length);
for (int j = 0; j < newnum_char.length; j++) {
newnum_char[j]=num_char[j];
}
Arrays.sort(num_char); //个数的自然排序。第一个值就是最小值,也就是字符出现的次数
for (int k = 0; k < chars.length; k++) {
Iterator<String> iterator1 = strings.iterator();
int m = 0;
while (iterator1.hasNext()){
String tempstr=iterator1.next();
if(tempstr.equals(String.valueOf(temp_char[k])) && newnum_char[m]==num_char[0]){
temp_char[k]=' ';
}
m++;
}
}
StringBuffer stringBuffer = new StringBuffer();
for (int j = 0; j < temp_char.length; j++) {
if (temp_char[j]==' ')
continue;
stringBuffer.append(temp_char[j]);
}
System.out.println(stringBuffer.toString());
}
}
我觉得自己的优势就是,运行时间不长,并且内存消耗并不算多。