首页 > 试题广场 >

统计某个字符串中英文字母出现的次数并排序输出

[编程题]统计某个字符串中英文字母出现的次数并排序输出
  • 热度指数:296 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一个字符串由数字和英文字母组成或只有数字或只有字母,现需要统计英文字母出现的次数,并按出现次数从大到小依次输出这些英文字母和其出现的次数。
注:
1. 出现次数相同的不同字符按字典序小的排列在前,字典序大的排列在后
2. 若字符串中没有英文字母,请返回字符串"0"

输入描述:
输入数据为 字符串(数字字母组合 or 纯英文字母 or  纯数字 )
数据范围:0 <= 字符串的长度 <= 20


输出描述:
输出数据为 字符串(每个英文字母后跟该字母出现的次数)
注:
1. 出现次数相同的不同字符按字典序小的排列在前,字典序大的排列在后
2. 若字符串中没有英文字母,请返回字符串"0"
示例1

输入

"AAAB1ccb5"

输出

"A3c2B1b1"

import java.util.*;


public class Solution {
    /**
     * 
     * @param input string字符串 
     * @return string字符串
     */
    public String printOutput (String input) {
        // write code here
        TreeMap<Character,Integer>map=new TreeMap<>();
        int count=0;
        for(int i=0;i<input.length();i++){
            char s=input.charAt(i);
            if(Character.isLetter(s)){
                if(!map.containsKey(s)){
                    map.put(s,1);
                }else{
                    map.put(s,map.get(s)+1);
                }
                count++;
            }else{
                continue;
            }
        }
        if(count==0){
            return "0";
        }
        StringBuilder sb=new StringBuilder();
        Set<Character> set = map.keySet();
        while(!map.isEmpty()) {
            // 通过遍历每一个key的值,获取到对应的value值
            int maxValue = 0;
            Character maxZiFu = null;
            for(Character cha : set) {
                int value= map.get(cha);
                if(value > maxValue) {// 为了将当前map集合中的最大值获取到
                    maxValue = value;
                    maxZiFu = cha;
                }
            }
            sb.append(String.valueOf(maxZiFu));
            sb.append(String.valueOf(maxValue));
            //将最大的键值对输出之后,从map集合中删除
            map.remove(maxZiFu);
        }
        return sb.toString();
    }
}

发表于 2022-06-24 17:23:59 回复(0)
class Solution {
public:
    /**
     *
     * @param input string字符串
     * @return string字符串
     */
    using psi = pair<char, int>;
    static bool cmp(const psi a, const psi b)
    {
        return a.second == b.second ? a.first < b.first : a.second > b.second;
    };
    string printOutput(string input) {
        // write code here
        unordered_map<char, int>umap;
        for(char val : input)
        {
            if((val >= 'a' && val <='z') || (val>='A' && val <='Z'))
                umap[val]++;
        }
        vector<psi> res;
        for(auto [k, v] : umap)
        {
            res.push_back({k,v});
        }
        string str;
        sort(res.begin(), res.end(), cmp);
        if(res.size() == 0)
        {
            str += "0";
        }
        else{
            vector<psi>::iterator iter = res.begin();
            
            for (iter = res.begin(); iter != res.end(); iter++)
            {
                str += (char)(iter->first);
                str += to_string(iter->second);
            }
        }
        return str;
    }
};
发表于 2022-11-01 18:17:02 回复(0)
#
#
# @param input string字符串
# @return string字符串
#
from collections import defaultdict
class Solution:
    def printOutput(self , input ):
        # write code here
        d = defaultdict(int)
        for c in input:
            if c.isalpha():
                d[c] += 1
        if len(d) == 0:return "0"
        ans = sorted(d.items(), key=lambda x: (-x[1], x[0]))
        res = ""
        for a in ans:
            res += a[0] + str(a[1])
        return res

发表于 2022-06-04 21:41:42 回复(0)
class Solution:
    def printOutput(self , input ):
        dic ={}
        temp = input
        for i in temp:
            if not str(0) <= str(i) <= str(9):
                if i in dic:
                    dic[i] += 1
                else:
                    dic[i] = 1
        if dic == {}:
            return "0"
        else:
            temp = list(dic.items())
            temp.sort(key=lambda x:x[1], reverse=True)
            ans = ""
            for i in range(0,len(temp)):
                ans += temp[i][0]
                ans += str(temp[i][1])
            return ans

发表于 2022-03-04 20:02:00 回复(0)