Java题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出:
删除字符串中出现次数最少的字符后的字符串。
样例输入:
abcdd
样例输出:
dd
解法
该题考查对字符串的操作。
- 对字符串的字符进行遍历;
 - 遍历时统计每个字符的出现的次数,可以用哈希存储;
 - 最小次数的字符用链表存储
 - 非最小次数的字符进行输出。
 
 /*
  *  Copyright (c) waylau.com, 2022. All rights reserved.
 */
 
package com.waylau.nowcoder.exam.oj.huawei;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
 
/**
 * HJ23 删除字符串中出现次数最少的字符.
 * 描述:实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。
 * 输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
 * 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
 * 输出: 删除字符串中出现次数最少的字符后的字符串。
 *
 * @author <a href="https://waylau.com">Way Lau</a>
 * @since 2022-08-15
 */
public class HJ023DeleteLeastOccurringCharacterFromString {
    public static void main(String[] args) {
        // 输入
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String in = sc.nextLine();
            int len = in.length();
            // 遍历时统计每个字符的出现的次数,可以用哈希存储。
            Map<Character, Integer> map = new HashMap<>(len);
            for (int i = 0; i < len; i++) {
                char ch = in.charAt(i);
                Integer count = map.get(ch);
                if (count == null) {
                    count = 1;
                } else {
                    count++;
                }
                map.put(ch, count);
            }
            // 最小数量的字符用链表存储;
            List<Character> minList = new ArrayList<>(len);
            int min = Integer.MAX_VALUE;
            for (Entry<Character, Integer> entry : map.entrySet()) {
                char ch = entry.getKey();
                int count = entry.getValue();
                if (count < min) {
                    min = count;
                    // 清空非最小值
                    minList.clear();
                    minList.add(ch);
                } else if (count == min) {
                    minList.add(ch);
                } else {
                    // 什么都不做
                }
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < len; i++) {
                char ch = in.charAt(i);
                // 不是最小,就输出
                if (!minList.contains(ch)) {
                    sb.append(ch);
                }
            }
            // 输出
            System.out.println(sb.toString());
        }
        // 关闭
        sc.close();
    }
}
	
参考引用
- 本系列归档至https://github.com/waylau/nowcoder-exam-oj
 - 《Java 数据结构及算法实战》:https://github.com/waylau/java-data-structures-and-algorithms-in-action
 - 《数据结构和算法基础(Java 语言实现)》(柳伟卫著,北京大学出版社出版):https://item.jd.com/13014179.html
 
查看6道真题和解析