华为机试,删除出现次数最少的字符串,不改变原来的顺序

在这里插入图片描述
这道题有点坑的地方是,输出的类型也会检查。不能是视觉上对的上就行。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;

/**
 * @author chaoxi
 * @create 2021-07-25 10:40
 */
public class Main {
    public static void main(String[] args) throws IOException {


        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        while(s!=null && s.length()!=0){
            delmin(s);
            s = br.readLine();
        }
    }



    public static void delmin(String string){
        char[] chars = string.toCharArray();
        char[] temp_char=new char[chars.length];
        for (int w = 0; w <chars.length ; w++) {
            temp_char[w]=chars[w];
        }


        Arrays.sort(chars);
        string=String.valueOf(chars);


        HashSet<String> strings = new HashSet<>();
        for (int i = 0; i < chars.length; i++) {
            strings.add(String.valueOf(chars[i]));
        }

        Iterator<String> iterator = strings.iterator();
        int[] num_char = new int[strings.size()]; //定义一个数组用于存储每个字符的个数
        int i =0;
        while (iterator.hasNext()){
            String subString =iterator.next();
            num_char[i] = string.lastIndexOf(subString) - string.indexOf(subString) +1;
            i++;
        }




        int[] newnum_char= new int[num_char.length];
//            System.out.println(newnum_char.length);
        for (int j = 0; j < newnum_char.length; j++) {
            newnum_char[j]=num_char[j];
        }
        Arrays.sort(num_char); //个数的自然排序。第一个值就是最小值,也就是字符出现的次数

        for (int k = 0; k < chars.length; k++) {
            Iterator<String> iterator1 = strings.iterator();
            int m = 0;
            while (iterator1.hasNext()){
                String tempstr=iterator1.next();

                if(tempstr.equals(String.valueOf(temp_char[k])) && newnum_char[m]==num_char[0]){
                    temp_char[k]=' ';
                }
                m++;
            }

        }

        StringBuffer stringBuffer = new StringBuffer();

        for (int j = 0; j < temp_char.length; j++) {
            if (temp_char[j]==' ')
                continue;
            stringBuffer.append(temp_char[j]);
        }
        System.out.println(stringBuffer.toString());

    }

}


在这里插入图片描述
我觉得自己的优势就是,运行时间不长,并且内存消耗并不算多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值