分析:用哈希映射存储各个字符出现的次数,如果一个字符出现的次数能整除k且不为0,那么这个字符就有可能是破损的键值,再进一步判断即可。
#include<iostream>
#include<cstdio>
#include<vector>
#include<set>
using namespace std;
int cnt[130], vis[130];
int main(){
//freopen("aa.txt", "r", stdin);
int k;
cin >> k;
string str, res = "";
cin >> str;
for(int i = 0; i<str.length(); i++){
cnt[str[i]]++;
}
for(int i = 0; i<str.length(); i++){
if(cnt[str[i]] && cnt[str[i]] % k == 0){
int flag = 1, j;
for(j = i+1; j<i+k; j++){
if(str[j] != str[j-1]) {
flag = 0;
break;
}
}
if(!flag) cnt[str[i]] = -1;
i = j-1;
}
}
for(int i = 0; i<str.length(); i++){
if(!vis[str[i]] && cnt[str[i]] && cnt[str[i]]%k == 0){
res += str[i];
vis[str[i]] = 1;
}
}
cout << res << '\n';
for(int i = 0; i<str.length(); i++){
cout << str[i];
if(cnt[str[i]] && cnt[str[i]]%k == 0){
i += k-1;
}
}
return 0;
}