按Java中最常见字符的顺序对字符串列表进行排序

耐克狗:

我正在尝试编写一个程序来按列表中最不频繁出现的字符对字符串列表进行排序。例如,如果列表是列表中[apple, orange, banana]的字母频率,则其频率为a-5,n-3,p-2,e-2,l-1,o-1,r-1,g-1,b-1由于橙色包含最不频繁的字母,所以程序将返回橙色,然后返回苹果,然后返回香蕉。

到目前为止,我已经编写了按频率对列表中所有字母排序的代码。但是我需要将其应用于查找包含最不频繁字母的字符串。

这是我的代码:

    Map<Character, Integer> elemCount = new LinkedHashMap<>();
    for (String word : words)
    {
        for (int i = 0; i  < word.length(); i++)
        {
            if (elemCount.containsKey(word.charAt(i)))
            {
                elemCount.put(word.charAt(i), elemCount.get(word.charAt(i)) + 1);
            }
            else
            {
                elemCount.put(word.charAt(i), 1);
            }
        }
    }
    ArrayList<Character> sortedElems = new ArrayList<>();
    elemCount.entrySet().stream().sorted(Collections.reverseOrder
    (Map.Entry.comparingByValue())).forEach(entry -> 
    { 
        for (int i = 1; i <= entry.getValue(); i++)
        {
            sortedElems.add(entry.getKey());
        }
    }
    );
    System.out.println(sortedElems);
迪帕克·辛格(Deepak Singh):

试试下面的代码:

public static void main(String[] args){
        List<String> list = new ArrayList<String>();
        list.add("apple");
        list.add("banana");
        list.add("orange");
        System.out.println(leastFrequentString(list));

    }


    private static Set<String> leastFrequentString(List<String> list){
        Map<String, Integer> mapStringToFrequency = new HashMap<>();
        for(String s:list){
            Map<Character, Integer> mapCharacterToFrequency =  wordFrequency(s);
            int totalScore = 0;
            for(Character c:mapCharacterToFrequency.keySet()){
                if(mapCharacterToFrequency.get(c)>1){
                    totalScore+=1;
                }
            }
            mapStringToFrequency.put(s,totalScore);
        }
        HashMap sortByValue =  sortByValue(mapStringToFrequency);
        return sortByValue.keySet();
    }

    private static Map<Character,Integer> wordFrequency(String s){
        Map<Character, Integer> mapCharacterToFrequency = new HashMap<Character, Integer>();
        for(Character c: s.toCharArray()){
            if(mapCharacterToFrequency.containsKey(c)){
                int frequency = mapCharacterToFrequency.get(c);
                frequency +=1;
                mapCharacterToFrequency.replace(c,frequency);
            }else{
                mapCharacterToFrequency.put(c,1);
            }
        }
        return mapCharacterToFrequency;
    }

    private static LinkedHashMap<String, Integer> sortByValue(Map<String, Integer> hm)
    {
        // Create a list from elements of HashMap
        List<Map.Entry<String, Integer> > list =
                new LinkedList<>(hm.entrySet());

        // Sort the list
        list.sort(Comparator.comparing(Map.Entry::getValue));

        // put data from sorted list to HashMap
        LinkedHashMap<String, Integer> temp = new LinkedHashMap<>();
        for (Map.Entry<String, Integer> aa : list) {
            temp.put(aa.getKey(), aa.getValue());
        }
        return temp;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何提取字符串列表中最左边的常见字符?

字符串列表中最常见的部分字符串匹配

查找字符串中最常见字符的更有效方法

如何按字母顺序对字符串列表进行排序?

按数字部分的顺序对字符串列表进行排序

在Java中按字符对字符串列表进行排序

JS:编写一个遍历字符串列表并返回列表中最常见的前10个字符串的函数

在字符串列表中找到最常见的子字符串?

返回字符串中最常见的字符

单元格数组中最常见的字符串,不考虑字母顺序

无空格字符串中最常见的单词

如何找到字符串中最常见的部分?

从Redisearch索引中获取单词列表,按最常见的出现顺序进行排序

带有计数器的列表中最常见的字符串

查找文字中最常见的字符

按字符对字符串列表进行排序

按字母顺序对字符串列的每个值进行排序

按字典顺序排序的字符串列表

无法在C中按字母顺序对字符串列表进行排序

按字典顺序对字符串列表进行排序而不考虑大小写 - Haskell

按匈牙利字母顺序对匈牙利字符串列表进行排序

按数组中定义的顺序对字符串列表进行排序的有效方法?

按整数列表对字符串列表进行排序

查找单词中最常见的字母;按字母顺序

在字符串中查找常见字符

计算字符串Python中的常见字符

字符串中的常见字符计数javascript

按长度对字符串列表进行排序

按多个参数对字符串列表进行排序