字符统计及重排

标题:字符统计及重排 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。

#include <bits/stdc++.h>

using namespace std;

typedef struct{
    char ch;
    int value;
}node;


int s1[26],s2[26];


bool cmp(node a,node b) {
    if(a.value == b.value) {
        if(islower(a.ch) && islower(b.ch)) {
            return a.ch < b.ch;
        }
        if(isupper(a.ch) && isupper(b.ch)) {
            return a.ch < b.ch;
        }
        if(islower(a.ch)) {
            return true;
        } else {
            return false;
        }
    }
    return a.value > b.value;
}

int main(void)
{
    string str;
    while(cin >> str) {
        memset(s1,0,26 * sizeof(int));
        memset(s1,0,26 * sizeof(int));
        for(int i=0;i<(int)str.size();i++) {
            if(islower(str[i])) {
                s1[str[i] - 'a'] += 1;
            } else {
                s2[str[i] - 'A'] += 1;
            }
        }
        vector<node> ans;
        for(int i=0;i<26;i++) {
            if(s1[i] != 0) {
                node t;
                t.ch = i + 'a';
                t.value = s1[i];
                ans.push_back(t);
            }
            if(s2[i] != 0) {
                node t;
                t.ch = i + 'A';
                t.value = s2[i];
                ans.push_back(t);
            }
        }
        sort(ans.begin(),ans.end(),cmp);
        for(int i=0;i<ans.size();i++) {
            cout << ans[i].ch << ":" << ans[i].value << ';';
        }
    }
    return 0;
}


全部评论
import sys while True:     try:         s=list(sys.stdin.readline().strip())         sets=set(s)         dicts={}         for i in sets:             if i.isupper():                 dicts[i]=[s.count(i),s.index(i),1]             else:                 dicts[i]=[s.count(i),s.index(i),-1]         print(dicts)         dicts=sorted(dicts.items(),key=lambda x:(-x[1][0],x[1][2],x[1][1]))         res=[]         for i in range(len(dicts)):             temp=[dicts[i][0],dicts[i][1][0]]             res.append(':&(31936)#39;.join(str(i) for i in temp))         print(';&(31937)#39;.join(res))     except:         break 这么搞不知道对不对,次数第一,同是小写和同是大写看先后顺序,大写在小写后,XXxyxy排出来是x:2;y:2;X:2
点赞 回复 分享
发布于 2022-10-05 22:38 江苏
不太理解题目里的又要自然顺序,又要小写在大写之前,如果我大写先出现怎么办呢,两个只能满足一个
点赞 回复 分享
发布于 2022-10-05 22:22 江苏

相关推荐

自从我室友在计算机导论课上听说了“刷&nbsp;LeetCode&nbsp;是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在&nbsp;DP,请勿打扰,否则&nbsp;Time&nbsp;Limit&nbsp;Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk&nbsp;is&nbsp;cheap.&nbsp;Show&nbsp;me&nbsp;the&nbsp;code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j]&nbsp;代表第&nbsp;i&nbsp;个人坐在第&nbsp;j&nbsp;个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target&nbsp;node),我应该用&nbsp;BFS&nbsp;还是&nbsp;DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点&nbsp;(x,&nbsp;y),我们俩的路径有&nbsp;k&nbsp;个交点,为了最小化时间复杂度,应该在&nbsp;(x/2,&nbsp;y/2)&nbsp;处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是&nbsp;O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到&nbsp;O(log&nbsp;n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你&nbsp;Two&nbsp;Sum&nbsp;刷了几遍了?”“别提了,昨天遇到一道&nbsp;Hard&nbsp;题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode&nbsp;真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务