题目来源java
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符从新调整顺序,按 PATestPATest....
这样的顺序输出,并忽略其它字符。固然,六种字符的个数不必定是同样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到全部字符都被输出。ios
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。c++
在一行中按题目要求输出排序后的字符串。题目保证输出非空。spa
redlesPayBestPATTopTeePHPereatitAPPT
PATestPATestPTetPTePePee
#include <iostream> #include <vector> #include <string> using namespace std; int main() { const string pat = "PATest"; const int size = 6; vector<int> arr(6); string str; cin >> str; // 记录PATest出现的次数 for (int i = 0; i < str.size(); ++i) { char c = str[i]; for (int j = 0; j < size; ++j) { if (c == pat[j]) { arr[j]++; } } } // 记录出现次数最少的,次数最多的 int min = arr[0]; int max = arr[0]; for (int i = 1; i < size; ++i) { if (arr[i] <= min) { min = arr[i]; } if (arr[i] >= max) { max = arr[i]; } } // 能够组成min个PATest字符串 for (int i = 0; i < min; ++i) { cout << "PATest"; for (int j = 0; j < size; ++j) { arr[j]--; } } // 按PATest的顺序,输出剩下的字符串 // 每输出一次,对应的数量就-1 // 数量为0的就不输出 for (int i = 0; i < max; ++i) { for (int j = 0; j < size; ++j) { if (arr[j] != 0) { arr[j]--; cout << pat[j]; } } } return 0; }