题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。
输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
输入例子:
abcdd
输出例子:
dd
public String[] delMinFrequencyChar(String[] input) {
int n = input.length;
String[] res = new String[n];
for (int i = 0; i < n; i++) {
String s = input[i];
char[] chs = s.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (char c : chs) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(Comparator.comparingInt(Map.Entry::getValue));
Set<Character> removeChar = new HashSet<>();
int min = list.get(0).getValue();
removeChar.add(list.get(0).getKey());
for (int j = 1; j < list.size(); j++) {
if (list.get(j).getValue() == min) {
removeChar.add(list.get(j).getKey());
} else {
break;
}
}
StringBuilder sb = new StringBuilder();
for (char c : chs) {
if (!removeChar.contains(c)) {
sb.append(c);
}
}
res[i] = sb.toString();
}
return res;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.nextLine(); // 去掉回车符
for (int i = 0; i < n; i++) {
String s = scanner.nextLine();
char[] chs = s.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (char c : chs) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(Comparator.comparingInt(Map.Entry::getValue));
Set<Character> removeChar = new HashSet<>();
int min = list.get(0).getValue();
removeChar.add(list.get(0).getKey());
for (int j = 1; j < list.size(); j++) {
if (list.get(j).getValue() == min) {
removeChar.add(list.get(j).getKey());
} else {
break;
}
}
StringBuilder sb = new StringBuilder();
for (char c : chs) {
if (!removeChar.contains(c)) {
sb.append(c);
}
}
System.out.println(sb);
}
}
}
一种新的编程思想:
1、将26个字母转换成1-26个数字来存储,来比较;
2、数组新用法:用数组索引来代表具体的数字,用具体索引锁存的数字来代表出现的次数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
String str = sc.nextLine();
int[] num = new int[26];//将字符转换为数字,存放在数组中
for(int i=0; i<str.length(); i++) {
char ch = str.charAt(i);
int n = (int)(ch - 'a');
num[n] ++;
}
int min = Integer.MAX_VALUE;//当不知有多少重复次数时的固定操作
for(int i=0; i<26; i++) {
if(num[i] != 0 && num[i] < min) {
min = num[i];
}
}
for(int i=0; i<str.length(); i++) {
char ch = str.charAt(i);
int n = (int)(ch - 'a');
if(num[n] != min) {
System.out.print(ch);
}
}
System.out.println();//平台本身问题,需要输出这一句
}
}
}
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
while(scan.hasNextLine()){
String str=scan.nextLine();
int []max=new int[26];
char[]ch=str.toCharArray();
int min=Integer.MAX_VALUE;
for(int i=0;i<ch.length;i++){
max[ch[i]-'a']++;
min=min>max[ch[i]-'a']?max[ch[i]-'a']:min;
}
for(int i=0;i<max.length;i++){
if(max[i]==min){
str=str.replaceAll(String.valueOf((char)(i+97)), "");
}
}
System.out.println(str);
}
}
}
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main
{
public static void main (String[] args)
{//abcdabcddd
StringBuilder res = new StringBuilder(256);
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
//count character times
char[] chs = input.toCharArray();
for (char c : chs) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
int min = Collections.min(map.values());
//delete
for (char ch : chs) {
if (min != map.get(ch))
res.append(ch);
}
System.out.println(res.toString());
}
}
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner scan=new Scanner(System.in);
while(scan.hasNextLine()){
String str=scan.nextLine();
if(str.length()>20){
continue;
}
int []max=new int[26];
char[]ch=str.toCharArray();
int min=Integer.MAX_VALUE;
for(int i=0;i<ch.length;i++){
max[ch[i]-'a']++;
min=min>max[ch[i]-'a']?max[ch[i]-'a']:min;
}
for(int i=0;i<max.length;i++){
if(max[i]==min){
str=str.replaceAll(String.valueOf((char)(i+97)), "");
}
}
System.out.println(str);
}
}
}