PAT 1043 输出PATest (散列)

给定一个长度不超过 10^4 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。

输入格式:

输入在一行中给出一个长度不超过 10^4  的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:

redlesPayBestPATTopTeePHPereatitAPPT
 

输出样例:

PATestPATestPTetPTePePee

思路>>

对于字符串中非PATest的字符,不用管即可,分别用0到5去记录这六个字符,输出时当六个都为0时停止输出。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int hashtable[7]={0};
 5     char str[10010];
 6     scanf("%s",str);
 7     int len=strlen(str);
 8     for(int i=0;i<len;i++){
 9         if(str[i]=='P') hashtable[0]++;
10         else if(str[i]=='A') hashtable[1]++;
11         else if(str[i]=='T') hashtable[2]++;
12         else if(str[i]=='e') hashtable[3]++;
13         else if(str[i]=='s') hashtable[4]++;
14         else if(str[i]=='t') hashtable[5]++;
15     }
16     while(hashtable[0]>0||hashtable[1]>0||hashtable[2]>0||hashtable[3]>0||hashtable[4]>0||hashtable[5]>0){
17         if(hashtable[0]!=0) {printf("P");hashtable[0]--;}
18         if(hashtable[1]!=0) {printf("A");hashtable[1]--;}
19         if(hashtable[2]!=0) {printf("T");hashtable[2]--;}
20         if(hashtable[3]!=0) {printf("e");hashtable[3]--;}
21         if(hashtable[4]!=0) {printf("s");hashtable[4]--;}
22         if(hashtable[5]!=0) {printf("t");hashtable[5]--;}
23     }
24 }

 

posted @ 2020-04-02 22:20  U40大贤者泰塔斯  阅读(154)  评论(0)    收藏  举报