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()+"  ");
        }
    }

}

原文地址:https://www.cnblogs.com/qingyundian/p/8343699.html

时间: 2024-11-18 06:23:49

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

有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数

1.有一个字符串,其中包含中文字符.英文字符和数字字符,请统计和打印出各个字符的个数. Map接口定义的集合又称查找表,用于存储所谓"Key-Value"映射对.Key可以看成是Value的索引,作为Key的对象在集合中不可以重复. import java.util.HashMap; import java.util.Map; public class Demo { public static void main(String[] args) throws Exception{ Str

java算法面试题

1. 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值, 最小值,平均值,和值,并输出出来. class ArrayNumber{ public static void main(String[] args){ int[] arrayNumber; arrayNumber = new int[10]; System.out.println(“以下是随机的10个整数:”); // 填入随机的 10个整数 for (int i =0; i<arrayNumbe

九章算法面试题55 旋转字符串

九章算法官网-原文网址 http://www.jiuzhang.com/problem/55/ 题目 给一个字符串和一个旋转的偏移量offset,将字符串循环右移offset位. 如:"abcdefg" 循环右移 4位之后变为了:"defgabc" 要求做到O(1)的额外空间耗费,O(n)的时间 在线测试本题 http://lintcode.com/problem/rotate-string/ 解答 采用三步反转法. 以S="abcdefg"  

js判断字符串是否包含中文或英文

转自 http://yuanliang4521-163-com.iteye.com/blog/1888601 第一种方法 <script language="javascript"> function funcChina(){ var obj = document.form1.txtName.value; if(/.*[\u4e00-\u9fa5]+.*$/.test(obj)) { alert("不能含有汉字!"); return false; } r

java算法面试题:设计一个快速排序。双路快速排序,简单易于理解。

package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class QuickSort { /* * 快速排序 */ public static void main(String[] args) { int[] strVoid = new int[] { 11, 66, 22, 0,

java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒

package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Array_Reverse { public static void main(String[] args) { /* * 有数组a[n],用java代码将数组元素顺序颠倒 */ int a[]={11,8,2,24,90,23}; //首先可以用集合的方法把数组元素颠倒

二位数组按某一个或多个字段值(升序/降序)排序

输出结果:

java循环练习:输入一个字符串,统计该字符串中分别包含多少个数字,多少个字母,多少个其他字符

package practiceGO; import java.util.Scanner; /*  * 3.输入一个字符串,统计该字符串中分别包含多少个数字,多少个字母,多少个其他字符  */ public class Cto { public static void main(String[] args) {         int englishCount = 0;// 英文字母个数         int spaceCount = 0;// 空格个数         int numCoun

数据结构与算法面试题80道

由于这些题,实在太火了.所以,应广大网友建议要求,在此把之前已整理公布的前80题, 现在,一次性分享出来.此也算是前80题第一次集体亮相. 此些题,已有上万人,看到或见识到,若私自据为己有,必定为有知之人识破,付出代价. 所以,作者声明: 本人July对以上所有任何内容和资料享有版权,转载请注明作者本人July出处. 向你的厚道致敬.谢谢. ------------------------------------------------------------------------------