繁体   English   中英

关于单词字符排序的问题

[英]Problems with sorting the characters of a word

我有一个问题,我已经挣扎了一段时间。 给我一个由英文字母的大小字母组成的单词,对字符进行排序,使单词中最常出现的字符出现在第一个位置,如果它们出现的次数相同,它们将按字典序排序。 如:

输入:说明

输出:innssttcoru

到目前为止,我已经写了这个,但是从这里我不知道如何对它们进行排序和正确显示,提示?

public class Main {
public static void main(String[] args) throws IOException {
    String testString = " ";
    BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
    testString = rd.readLine();
    Map<Character, List<Character>> map = new HashMap<>();
    for (int i = 0; i < testString.length(); i++) {
        char someChar = testString.charAt(i);
        if (someChar == ' ') {
            continue;
        }
        char ch = testString.charAt(i);
        List<Character> characters = map.getOrDefault(Character.toLowerCase(ch), new ArrayList<>());
        characters.add(ch);
        map.put(Character.toLowerCase(ch), characters);
    }
    List<Map.Entry<Character, List<Character>>> list = new ArrayList<>(map.entrySet());}

您可以添加TreeMap counterAppearkey是字符的重复次数,值是具有相同key重复次数的字符列表。 此列表需要在打印前进行排序,以确保按要求排序。 使用TreeMap确保地图按键(重复次数)排序。

public static void main(String[] args) throws IOException {
        String testString = " ";
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
        testString = rd.readLine();
        Map<Character, List<Character>> map = new HashMap<>();
        for (int i = 0; i < testString.length(); i++) {
            char someChar = testString.charAt(i);
            if (someChar == ' ') {
                continue;
            }
            char ch = testString.charAt(i);
            //Change to Optimize Code
            Character keyCharacter = Character.toLowerCase(ch);
            if (map.get(keyCharacter) == null) {
                map.put(keyCharacter, new ArrayList<>());
            }
            List<Character> characters = map.get(keyCharacter);
            characters.add(ch);
        }
        TreeMap<Integer, List<Character>> counterAppear = new TreeMap<>();
        for (Map.Entry<Character, List<Character>> entry : map.entrySet()) {
            Character character = entry.getKey();
            int repeatCharTime = entry.getValue().size();
            if (counterAppear.get(repeatCharTime) == null) {
                counterAppear.put(repeatCharTime, new ArrayList<>());
            }
            List<Character> characters = counterAppear.get(repeatCharTime);
            characters.add(character);
        }

        for (Integer repeatCharTime : counterAppear.descendingKeySet()) {
            List<Character> keyCharacters = counterAppear.get(repeatCharTime);
            Collections.sort(keyCharacters);
            for (Character character : keyCharacters) {
                for (int i = 0; i < repeatCharTime; i++) {
                    System.err.print(character);
                }
            }
        }
    }

这是我的解决方案:

import java.util.*;

public class Test
{
    static void process(String s)
    {
        HashMap<Character,Integer> map = new HashMap<Character,Integer>();
        for(Character c : s.toLowerCase().toCharArray())
        {
            Integer nb = map.get(c);
            map.put(c, nb==null ? 1 : nb+1);
        }

        ArrayList<Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, (a,b) ->
        {
            int res = b.getValue().compareTo(a.getValue());
            if(res!=0)
                return res;
            return a.getKey().compareTo(b.getKey());
        });

        for(Map.Entry<Character,Integer> e : list)
        {
            for(int i=0;i<e.getValue();i++)
                System.out.print(e.getKey());
        }
    }

    public static void main(String[] args)
    {
        process("Instructions");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM