1043. 输出PATest

来源:互联网 发布:七龙珠同人小说知乎 编辑:程序博客网 时间:2024/06/13 22:04
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“PATestPATest....”这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按PATest的顺序打印,直到所有字符都被输出。

输入格式:

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

输出格式:

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

输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee

 

算法:

  1. 算法开始。
  2. 读取一个字符,如果它为换行符号则跳到
  3. 如果这个字符为P,则array[0]++。如果为A,则array[1]++。如果为T,则array[2]++。如果为e,则array[3]++。如果为s,则array[4]++。如果为t,则array[5]++。
  4. 回到第二步。
  5. 如果array数组元素都为零则跳到第十二步。
  6. 如果array[0]不为零,则输出P,array[0]--。
  7. 如果array[1]不为零,则输出A,array[1]--。
  8. 如果array[2]不为零,则输出T,array[2]--。
  9. 如果array[3]不为零,则输出e,array[3]--。
  10. 如果array[4]不为零,则输出s,array[4]--。
  11. 如果array[5]不为零,则输出t,array[5]--。
  12. 算法结束。
时间复杂度:O(n),空间复杂度O(1)。
#include <stdio.h>#include <stdlib.h>int main(void) {int* array = (int*)calloc(6, sizeof(int));char c;int flag = 0;while ((c = getchar()) != '\n') {switch (c) {case 'P': array[0]++; break;case 'A': array[1]++; break;case 'T': array[2]++; break;case 'e': array[3]++; break;case 's': array[4]++; break;case 't': array[5]++; break;default: break;}}while (array[0] || array[1] || array[2] || array[3] || array[4] || array[5]) {if (array[0]) {putchar('P');array[0]--;}if (array[1]) {putchar('A');array[1]--;}if (array[2]) {putchar('T');array[2]--;}if (array[3]) {putchar('e');array[3]--;}if (array[4]) {putchar('s');array[4]--;}if (array[5]) {putchar('t');array[5]--;}}free(array);return 0;}

0 0