华为上机试题1(删除字符串中出现次数最少的字符)

本文分享了一道来自华为的编程题解决方案,采用Java实现,旨在移除字符串中出现次数最少的字符,并保持其他字符原有顺序。通过HashMap统计字符频率,确定最低频率并构建新字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人西电大四学生一枚,最近在做华为的上机练习题,知道写得不是很好,于是贴出来望大家指正一下。
题目来自于http://blog.youkuaiyun.com/column/details/huaweicode.html?&page=4,原文均是用的c++,我用的java写的。
题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

题目类别: 字符串
难度: 中级
运行时间限制: 10Sec
内存限制: 128MByte
阶段: 入职前练习
输入:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

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

样例输入:
abcdd

样例输出:
dd

public class num4 {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String s = in.next();
    System.out.println(deleteMinChar(s));
}

private static String deleteMinChar(String s) {
    int length = s.length();

    char c[] = s.toCharArray();
    HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
    //先使用hashmap来统计每个字符的出现次数
    for (int i = 0; i < length; i++) {
        if (hm.get(c[i]) == null)
            hm.put(c[i], 1);
        else {
            int tem = 1 + hm.get(c[i]);
            hm.put(c[i], tem);

        }
    }
    int min = 65535;
    //找出字符最小出现次数
    for (int i = 0; i < length; i++) {
        if (hm.get(c[i]) < min)
            min = hm.get(c[i]);

    }
    char cc[] = new char[length];
    int index = 0;
    //删除出现次数最少的字符
    for (int i = 0; i < length; i++) {
        if (hm.get(c[i]) > min) {
            cc[index] = c[i];
            index++;
        }
    }

    return new String(cc).trim();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值