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 }

浙公网安备 33010602011771号