给定一个长度不超过
1
0
4
10^4
104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过 1 0 4 10^4 104 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
解题思路:
- 散列表
h
a
s
h
t
a
b
l
e
[
256
]
hashtable[256]
hashtable[256] 下标为完整
A
S
C
I
I
ASCII
ASCII 码表,映射值为出现次数,字符数组
d
i
c
t
[
6
]
dict[6]
dict[6] 为
PATest
输出顺序,累加器 c n t cnt cnt 表示应该输出的字符数 - 遍历字符串
s
s
s,按照
PATest
字典序录入散列表 h a s h t a b l e hashtable hashtable 和累加器 c n t cnt cnt - 若累加器
c
n
t
>
0
cnt > 0
cnt>0 时,按照
PATest
字典序打印字符,并删减散列表 h a s h t a b l e hashtable hashtable 元素和累加器 c n t cnt cnt
答案代码:
#include <iostream>
#include <cstring>
using namespace std;
char dict[6] = {'P', 'A', 'T', 'e', 's', 't'}; // 字典
int hashtable[256] = {0};
int main() {
string s;
cin >> s;
int cnt = 0;
for (int i = 0; i != s.size(); i++) { // 遍历字符串
for (int j = 0; j < 6; j++) { // 按字典序录入
if (s[i] == dict[j]) {
hashtable[dict[j]]++;
cnt++;
}
}
}
while (cnt>0) { // PATest总数
for (int i = 0; i < 6; i++) { // 按字典序打印
if (hashtable[dict[i]] > 0) {
cout << dict[i];
hashtable[dict[i]]--;
cnt--;
}
}
}
return 0;
}