功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除,然后返回该子字符串。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除,然后返回该子字符串。
 * @author 汤小萌
 *
 */
public class DeleteMinChar {
    /**
     * 
     * @param data 传进来的字符串
     * @return
     */
    public static String deleteMinChar(String data) {
        // 将字符串转为数组
        char[] ch = data.toCharArray();
        // 创建Map集合,key : 字符   --  value : 字符的个数
        Map<Character, Integer> map = new HashMap<Character, Integer>();
        // 先将ch里面的元素的键填充进去,所有的value都是0  (利用了Map集合的键必须唯一特性)
        for(int i = 0; i < ch.length; i++) {
            map.put(ch[i], 0);
        }
        // 每一次遍历都是往直前在Map中占位的元素重新改变value的值
        for(int i = 0; i < ch.length; i++) {
            map.put(ch[i], map.get(ch[i]) + 1);
        }
System.out.println(map);
        // 这是一个比较大的数
        int num = Integer.MAX_VALUE;
        // 使用List集合存放最少的字符
        List<Character> list = new ArrayList<>();
        for(int i = 0; i < ch.length; i++) {
            if(map.get(ch[i]) < num) {
                // 如果当前遍历到的元素的个数小于上一个的元素的个数,那么就需要将比较的元素num换成当前这个元素的个数
                num = map.get(ch[i]);
                // 需要将list里面的元素都删除(因为发现还有更少的元素)
                list.clear();
                list.add(ch[i]);
            } else if(map.get(ch[i]) == num ) { 
                // 如果发现有相同少的个数的元素(那么这个元素也需要被添加到集合中,被删除)
                list.add(ch[i]);
            }
        }
        // 将list中的元素删除
        for(char c : list) {
            data = data.replace(String.valueOf(c), "");     
        }

        return data;
    }


    public static void main(String[] args) {
        String str = "asdasdasee";
        System.out.println(deleteMinChar(str));
    }

}

猜你喜欢

转载自blog.csdn.net/qq_38200548/article/details/80610527
今日推荐