题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
方法一
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class removetheleast {
//删除字符串中出现次数最少的字符
public static String removetheleast() {
//输入
Scanner s1 = new Scanner(System.in);
String input_str = s1.nextLine();
char[] c1 = input_str.toCharArray();
//统计字符出现的次数
Map<Character, Integer> m1 = new HashMap<>();
for (int i = 0; i < c1.length; i++) {
if (m1.containsKey(c1[i])) {
m1.put(c1[i], m1.get(c1[i]) + 1);
} else {
m1.put(c1[i], 1);
}
}
ArrayList<Character> list_min = new ArrayList<>();
int min = 800;
for (char j : m1.keySet()) {
if (m1.get(j) < min) {
min = m1.get(j);
list_min.clear();
list_min.add(j);
} else if (m1.get(j) == min) {
list_min.add(j);
}
}
String res = "";
//清除最少的字符串
for (int x = 0; x < c1.length; x++) {
if (!list_min.contains(c1[x])) {
res += c1[x];
}
}
return res;
}
}
方法二(使用到StringBuilder)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String s = in.nextLine();
int[] a = new int[26];
for(int i=0;i<s.length();i++){
a[s.charAt(i)-97]++;
}
int min = 21;
//找出出现最小的次数
for(int i=0;i<26;i++){
if(a[i]<min && a[i]>0){
min = a[i];
}
}
StringBuilder toBeDeleted = new StringBuilder();
for(int i=0;i<26;i++){
if(a[i]==min){
char c = (char)('a'+i);
toBeDeleted.append(c);
}
}
String str = toBeDeleted.toString();
StringBuilder res = new StringBuilder();
for(int i=0;i<s.length();i++){
if(!str.contains(s.charAt(i)+"")){
res.append(s.charAt(i));
}
}
System.out.println(res);
}
}
}
参考链接
https://www.cnblogs.com/GumpYan/p/5790493.html