删除字符串中出现次数最少的字符(考虑特殊字符与不考虑特殊字符解法)

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
注意每个输入文件有多组输入,即多个字符串用回车隔开
输出:删除字符串中出现次数最少的字符后的字符串。

解法一:
考虑特殊字符,万能代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.*;

public class Main11 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner in = new Scanner(new FileInputStream("D:\JavaData\tmp/input.txt"));
        //Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String input = in.nextLine();
            //去重字符
            Set<Character> set = new LinkedHashSet<>();
            for(int i=0;i<input.length();i++){
                set.add(input.charAt(i));
            }

            Character[] characters = set.toArray(new Character[0]); //set集合转换为字符数组,存放字符
            int[] charCounts = new int[characters.length];  //存放characters字符数组对应的字符出现的次数
            for(int i=0;i<characters.length;i++){
                for(int j=0;j<input.length();j++){
                    if(characters[i]==input.charAt(j)){
                        charCounts[i]++;
                    }
                }
            }

            StringBuilder stringBuilder = new StringBuilder(); //保存需要删除字符
            int[] copyCharCounts = Arrays.copyOf(charCounts, charCounts.length);
            Arrays.sort(copyCharCounts); //找到出现最少次数的字符
            int min = copyCharCounts[0];
            for(int i=0;i<charCounts.length;i++){
                if(min==charCounts[i]){
                    stringBuilder.append(characters[i]);
                }
            }

            String index = stringBuilder.toString();
            StringBuilder outPut = new StringBuilder();
            for(int i=0;i<input.length();i++){
                if(!index.contains(String.valueOf(input.charAt(i))))outPut.append(input.charAt(i));//重新组装
            }
            System.out.println(outPut.toString());
        }
    }
}

解法二:
字符串只包含小写英文字母, 不考虑非法输入

import java.io.*; 
public class Main{
    public static void main(String []args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = null;
        while((s=br.readLine()) != null){
            int []count = new int[26];
            int min = Integer.MAX_VALUE;
            for(char c : s.toCharArray()){
                count[c - 'a']++;
                min = Math.min(min,count[c-'a']);
            }
            String ret = "";
            for(char c : s.toCharArray()){
                if(count[c - 'a'] != min){
                    ret += c + "";
                }
            }
            System.out.println(ret);
        }
    }
}

原文地址:https://www.cnblogs.com/InternetJava/p/14350248.html