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


    华为机试题

     

    题目描述

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

    输入描述:

    字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于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(); } } }
  • 相关阅读:
    Leo程序员羊皮卷文摘(更新ing)
    ubuntu下的yuv播放器
    浏览器之一
    海量数据处理常用思路和方法(zh)
    我本将心向明月,奈何明月照沟渠
    转载光纤通信之父
    重装系统或是更换电脑之后,Foxmail的恢复
    关于录制Linux视频
    Linux之路(原发表于07年,现在搬到博客)
    Gentoo安装 miniCD+stage3
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8040258.html
Copyright © 2020-2023  润新知