#include<bits/stdc++.h>
using namespace std;
map<char, bool> m;//用于记录字符是否为坏键,如果是则为true,否则为false
set<char> printed;//用于存储看坏键是否已经输出
bool NosureBroken[256];
int main(){
int k, cnt = 1;
string s;
scanf("%d", &k);
cin >> s;
char pre = ‘#‘;
s += ‘#‘;
for(int i = 0; i < s.length(); i++){
if(s[i] == pre){
cnt += 1;
}else{
if(cnt % k != 0){
NosureBroken[pre] = true;
}
cnt = 1;
}
if(i != s.length() - 1) m[s[i]] = (cnt % k == 0);
pre = s[i];
}
for(int i = 0; i < s.length() - 1; i++){
if(NosureBroken[s[i]] == true){
m[s[i]] = false;
}
}
for(int i = 0;i < s.length() - 1; i++){
if(m[s[i]] && printed.find(s[i]) == printed.end()){
printf("%c", s[i]);
printed.insert(s[i]);
}
}
printf("\n");
for(int i = 0; i < s.length() - 1; i++){
printf("%c", s[i]);
if(m[s[i]]){
i = i + k - 1;
}
}
return 0;
}
原文:https://www.cnblogs.com/tsruixi/p/12983681.html