Life_Game
2024-11-17 22:39:26
这道题纯水,意思就是出现频率最高的字母一一对应,然后替换就可以了。
但是有一个坑:最后一个字符串后只能输出一个空行,当时卡了我好久。
用两个桶存储每个字母对应的频率和是哪个字母。然后排序。
再用一个数组存储每个字母对应的字母即可。
代码如下:
#include <bits/stdc++.h>
using namespace std;
struct character{
char id;int num;
}bot1[3300], bot2[3300];
char mapp[300];
string s, sp;
int T;
bool cmp(character a, character y){
return a.num>y.num;
}
int main(){
cin>>T;
while(T--){
// 记得清空!!!
memset(bot1, 0, sizeof bot1);
memset(bot2, 0, sizeof bot2);
string tmp;
cin>>s>>tmp;
for(auto ed : s){
bot1[ed].id=ed;
bot1[ed].num++;
}
sort(bot1, bot1+200, cmp);
for(auto ed : tmp){
bot2[ed].id=ed;
bot2[ed].num++;
}
sort(bot2, bot2+200, cmp);
for(int i=0;i<=200;i++){
if(bot1[i].num!=0){
mapp[bot2[i].id]=bot1[i].id;
}
}
for(auto ed : tmp){
cout<<mapp[ed];
}
cout<<'\n';//注意:每个字符串需要两行分割
if(T) cout<<'\n'; //最后一个不用
}
}