zoukankan      html  css  js  c++  java
  • java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

    package com.swift;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    
    public class Zhongwen_Shuzi_Times {
    
        public static void main(String[] args) {
            /*
             * 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
             */
            String str="琅琊榜fengqichanglin987琅榜623231212314safdbcbde";
            char[] arr=str.toCharArray();
            
            Map<Character,Integer> map=new HashMap<Character,Integer>();
            int num=0;
            for(char c:arr) {
                map.put(c, num);
            }
            for(Entry<Character,Integer> entry:map.entrySet()) {
                System.out.println(entry.getKey().toString()+entry.getValue());
            }
            for(char c:arr) {
                if(map.containsKey(c)) {
                    num=map.get(c);
                    num++;
                    map.remove(c);
                    map.put(c, num);
                }
            }
            for(Entry<Character,Integer> entry:map.entrySet()) {
                System.out.print(entry.getKey().toString()+"-"+entry.getValue()+"  ");
            }
            
        }
    
    }

    按键值的降序排序

    package com.swift;
    
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.TreeMap;
    
    public class Zhongwen_Shuzi_Times {
    
        public static void main(String[] args) {
            /*
             * 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数,按值的降序排序,如果值相同则按键值的字母顺序
             */
            String str="琅琊榜fengqichanglin987琅榜623231212314safdbcbde";
            char[] arr=str.toCharArray();
            
            Map<Character,Integer> map=new TreeMap<Character,Integer>(new Comparator<Character>() {//这里只能按键值排序
    
                @Override
                public int compare(Character o1, Character o2) {
                    return o2-o1;//降序
                }
                
            });
            int num=0;
            for(char c:arr) {
                map.put(c, num);
            }
            for(Entry<Character,Integer> entry:map.entrySet()) {
                System.out.println(entry.getKey().toString()+entry.getValue());
            }
            for(char c:arr) {
                if(map.containsKey(c)) {
                    num=map.get(c);
                    num++;
                    map.remove(c);
                    map.put(c, num);
                }
            }
            for(Entry<Character,Integer> entry:map.entrySet()) {
                System.out.print(entry.getKey().toString()+"-"+entry.getValue()+"  ");
            }
            
        }
    
    }

    按值的降序排序,如果值相同则按键值的字母顺序

    要注意这个问题:

    不能把map.entrySet()直接强转成List<Entry<Character,Integer>>

    需要用new ArrayList()的构造,即放在参数中

    package com.swift;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.TreeMap;
    
    public class Zhongwen_Shuzi_Times {
    
        public static void main(String[] args) {
            /*
             * 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数,按值的降序排序,如果值相同则按键值的字母顺序
             */
            String str="琅琊榜fengqichanglin987琅榜623231212314safdbcbde";
            char[] arr=str.toCharArray();
            
            Map<Character,Integer> map=new TreeMap<Character,Integer>();
            int num=0;
            for(char c:arr) {
                map.put(c, num);
            }
            for(char c:arr) {
                if(map.containsKey(c)) {
                    num=map.get(c);
                    num++;
                    map.remove(c);
                    map.put(c, num);
                }
            }
            for(Entry<Character,Integer> entry:map.entrySet()) {
                System.out.print(entry.getKey().toString()+"-"+entry.getValue()+"  ");
            }
            List<Entry<Character,Integer>> list=new ArrayList<Entry<Character, Integer>>(map.entrySet());
            Collections.sort(list, new Comparator<Entry<Character,Integer>>(){
    
                @Override
                public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
                    int num=o2.getValue()-o1.getValue();
                    return num==0?o1.getKey()-o2.getKey():num;
                }
            });
            System.out.println();
            for(Entry<Character,Integer> entry:list) {
                System.out.print(entry.getKey().toString()+"-"+entry.getValue()+"  ");
            }
        }
    
    }

  • 相关阅读:
    np.max 与 np.maximum
    套路、逻辑与思辨(道理的论证)
    套路、逻辑与思辨(道理的论证)
    拉普拉斯方程与复微分
    拉普拉斯方程与复微分
    计算机辅助解题
    计算机辅助解题
    使用Opencv中均值漂移meanShift跟踪移动目标
    密室问题
    各种机械键盘轴的差别,究竟什么轴好
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8343699.html
Copyright © 2011-2022 走看看