题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805280074743808
AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <vector>
#include <string.h>
using namespace std;
int main(){
string s;
cin>>s;
int P_cnt=0,A_cnt=0,T_cnt=0,e_cnt=0,s_cnt=0,t_cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]=='P')
P_cnt++;
else if(s[i]=='A')
A_cnt++;
else if(s[i]=='T')
T_cnt++;
else if(s[i]=='e')
e_cnt++;
else if(s[i]=='s')
s_cnt++;
else if(s[i]=='t')
t_cnt++;
else continue;
}
while(P_cnt!=0||A_cnt!=0||T_cnt!=0||e_cnt!=0||s_cnt!=0||t_cnt!=0){
while(P_cnt!=0&&A_cnt!=0&&T_cnt!=0&&e_cnt!=0&&s_cnt!=0&&t_cnt!=0)
{
cout<<"PATest";
P_cnt--,A_cnt--,T_cnt--,e_cnt--,s_cnt--,t_cnt--;
}
if(P_cnt!=0){
cout<<"P";
P_cnt--;
}
if(A_cnt!=0){
cout<<"A";
A_cnt--;
}
if(T_cnt!=0){
cout<<"T";
T_cnt--;
}
if(e_cnt!=0){
cout<<"e";
e_cnt--;
}
if(s_cnt!=0){
cout<<"s";
s_cnt--;
}
if(t_cnt!=0){
cout<<"t";
t_cnt--;
}
}
}
二刷:
#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;
int main(){
string str;
getline(cin,str);
int PNum=0,ANum=0,TNum=0,eNum=0,sNum=0,tNum=0;
int len=str.size();
for(int i=0;i<len;i++){
if(str[i]=='P')
PNum++;
else if(str[i]=='A')
ANum++;
else if(str[i]=='T')
TNum++;
else if(str[i]=='e')
eNum++;
else if(str[i]=='s')
sNum++;
else if(str[i]=='t')
tNum++;
}
while(PNum||ANum||TNum||eNum||sNum||tNum){
if(PNum){
printf("P");
PNum--;
}
if(ANum){
printf("A");
ANum--;
}
if(TNum){
printf("T");
TNum--;
}
if(eNum){
printf("e");
eNum--;
}
if(sNum){
printf("s");
sNum--;
}
if(tNum){
printf("t");
tNum--;
}
}
}
二刷(参考别人的代码,二刷目的是发现的新的解法,由于我的方法出现重复,所以,借鉴了别人的解法):
思路:利用hash散列,
#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;
int main(){
string str;
getline(cin,str);
int mpp[128]={0};
int len=str.size();
for(int i=0;i<len;i++){
mpp[str[i]]++;
}
while(mpp['P']>0||mpp['A']>0||mpp['T']>0||mpp['e']>0||mpp['s']>0||mpp['t']>0){
if((mpp['P']--)>0)printf("P");
if((mpp['A']--)>0)printf("A");
if((mpp['T']--)>0)printf("T");
if((mpp['e']--)>0)printf("e");
if((mpp['s']--)>0)printf("s");
if((mpp['t']--)>0)printf("t");
}
}