删除字符串中出现次数最少的字符

华为机试题

 

题目描述

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 

输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出描述:

删除字符串中出现次数最少的字符后的字符串。

示例1

输入

abcdd

输出

dd


思路:用桶存放字符出现的次数。然后在找出出现次数最少的字符(这里因为桶中会有许多0,所以选的时候排除个数为0的情况)。最后遍历字符串中的字符,看它在出现的次数>最小次数,就输出。
当然,也可以遍历字符串,如果字符出现次数等于最小次数,就用place(,"")代替字符,该方法是替换所有
import java.util.LinkedList;
import java.util.Scanner;
/*
 * 第一行一个数T(T ≤ 100),表示数据组数。
 * 对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,...,a2n(1 ≤ ai ≤ 1000000000)。表示原始牌组从上到下的序列。
 */

public class Main {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        
        int[] tong=new int[26];
        while(sc.hasNext()){
            String s=sc.next();
            char[] c=s.toCharArray();
            //只能放小写字母,用来放每个字符出现的次数
            //初始化桶
            for(int i=0;i<tong.length;i++)
                tong[i]=0;
for(int i=0;i<c.length;i++){ tong[c[i]-'a']++; } //找出出现最少的次数,也就是找出tong数组中的最小值 int min=Integer.MAX_VALUE; for(int i=0;i<tong.length;i++){ if(tong[i]!=0&&tong[i]<min) min=tong[i]; } //遍历字符串,当字符出现的次数>最小次数,就输出
        //这里是关键,字符出现的次数,就是字符在桶中的大小
for(int i=0;i<c.length;i++){ if(tong[c[i]-'a']>min){ System.out.print(c[i]); } }
        //这里一定要输出换行,因为还有下一次输入 System.out.println(); } } }

 

posted on 2017-12-14 22:08  夜的第八章  阅读(382)  评论(0编辑  收藏  举报

导航