按字典序输出这串字母出现最多的字母和第二多的字母(先把所有字母次数多少排好序)

Problem F: 神偷TMK

Description

TMK十分喜欢打CS,据说GDUTACM新生杯的一等奖的奖品的星际CS的真人CS游戏团体券,他毅然报了名。 然而TMK等不及决赛的来临,希望能早日可以玩真人CS。于是TMK打算把真人CS游戏团体券从师兄那里偷出来。 几听打探,TMK发现真人CS游戏团体券锁在了工一730的保险箱里面。但是他不知道密码。他突然想起了yfq给了他一个锦囊,当有困难的时候打开来看。 锦囊里面的纸条上有一串小写字母"abhcujzqacehbfjkbacxmcnjkaecfiallcxcbbcad",TMK灵机一动,密码应该是这串字母出现最多的字母和第二多的字母按字典序连接在一起吧。于是TMK在密码箱上按下了那两个字母,那么现在问那两个字母是什么

Input

Output

按字典序输出这串字母出现最多的字母和第二多的字母,中间无空格。

Sample Input

Sample Output

HINT

#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
struct Tnode
{
char ch;
int num;
} a[1005];


bool cmp(Tnode a,Tnode b)
{
return a.num>b.num;
}


int t[1005];
int main()
{
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
    string st="abhcujzqacehbfjkbacxmcnjkaecfiallcxcbbcad";
    int len=st.length();
    for (int i=0;i<len;i++)
    {
    t[st[i]]++;
    }
    int num=0;
    for (char i='a';i<='z';i++)
    {
    a[++num].ch=i;
    a[num].num=t[i];
    }
    sort(a+1,a+num+1,cmp);
   // for (int i=1;i<=num;i++)
   //  printf("%c %d\n",a[i].ch,a[i].num);
    //  printf("%c %d\n",a[1].ch,a[1].num);
     //  printf("%c %d\n",a[2].ch,a[2].num);
        printf("%c\n",a[1].ch);
         printf("%c\n",a[2].ch);
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是一个比较简单的字符串排序问题。我可以提供以下代码: def string_sort(string): result = "" letters = [] for char in string: if char.isalpha(): letters.append(char) letters.sort(key=lambda x: (x.lower() != x, x.lower() if x.isalpha() else x)) for char in string: if not char.isalpha(): result += char elif char in letters: letters.remove(char) result += char return result 这个函数接受一个字符串作为参数,并按顺序输出。规则是A或a排第一个,Z或z排第二个,B或b排第三个,Y或y排第四个。。。。N或n排第26个。如果大小写同时出现,大写字母。如果有数字或其他非字母字符,则它们会被放在最后不排序。 ### 回答2: 编写一个方法,实现按照上述规则对输入字符串进行排序。具体步骤如下: 1. 定义一个映射关系的字典,将字符与其对应的排序值关联起来。例如: ```python mapping = {'A': 1, 'Z': 2, 'B': 3, 'Y': 4, 'C': 5, ... 'N': 26} ``` 2. 定义一个排序规则的函数,用于传给`sorted()`方法进行排序。首判断字符是否在字典,若在则返回映射值,若不在则返回一个足够大的数以将其排在最后。 ```python def sort_rule(char): if char.upper() in mapping: if char.islower(): # 大写字母在前,小写字母在后,映射值增加一个小数以区分大小写 return mapping[char.upper()] + 0.1 else: return mapping[char] else: return float('inf') # 返回一个无穷大的数,保证其他字符排在最后 ``` 3. 输入字符串并按照排序规则对字符串进行排序,然后输出排序结果。 ```python def sort_string(input_str): sorted_str = sorted(input_str, key=sort_rule) print("排序结果:", ''.join(sorted_str)) ``` 4. 调用`sort_string()`方法,传入要排序的字符串作为参数,即可得到按照规则排序后的结果。 ```python sort_string("Azby4321") ``` 输出结果为:`排序结果:AzbY1234` 这样就实现了按照规则对输入字符串进行排序的方法。 ### 回答3: 首,我们需要对输入字符串进行筛选,将其的数字或其他字符提取出来放在一个新的字符串,不参与排序。 接下来,我们将剩余的字符进行大小写转换,方便比较。然后,我们可以使用冒泡排序的思想,从第一个字符开始,逐个比较相邻的字符,如果前面的字符大于后面的字符,则进行交换。具体步骤如下: 1. 声明一个空的结果字符串result,用来存储排序后的字符。 2. 声明一个临时变量temp,用来存储当前比较的字符。 3. 声明一个变量isSwap,表示是否进行交换的标志,初始值为false。 4. 声明一个变量count,表示排序后的字符的数量,初始值为0。 5. 遍历输入字符串,如果字符为数字或其他字符,则将其添加到结果字符串result,count加1。 6. 将剩下的字母字符转换为小写,并赋值给temp。 7. 判断temp是否为A或a,如果是,则将'A'或'a'添加到结果字符串result,isSwap置为true,count加1。 8. 如果temp不是A或a,我们可以依次判断temp是否为Z或z,B或b,Y或y,……,依次类推。 9. 如果temp是其的某个字符,将其对应的大写字母添加到结果字符串result,isSwap置为true,count加1。 10. 遍历一轮后,如果isSwap仍为false,说明已经完成了排序,跳出循环。 11. 如果isSwap为true,说明发生了交换,需要进行下一轮排序。 12. 重复步骤5~11,直到所有字符都排好序。 13. 返回结果字符串result。 这个方法的时间复杂度为O(n^2),其n为输入字符串长度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值