https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960
刚开始先初始化都是坏的,然后遍历字符串如果一段相同的字符串的长度不可以整除k,那么就是好的。
#include<bits/stdc++.h>
using namespace std;
int k;
string s;
map<char,int>st,hush;
int main(void)
{
for(int i=0;i<10;i++) st['0'+i]=-1;
for(int i=0;i<26;i++) st['a'+i]=-1;
st['_']=-1;
cin>>k>>s;
for(int i=0;i<s.size();i++)
{
int j=i;
while(j+1<s.size()&&s[i]==s[j+1]) j++;
if((j-i+1)%k) st[s[i]]=0;//是好的
i=j;
}
for(int i=0;i<s.size();i++)
if(!hush[s[i]]&&st[s[i]]==-1) cout<<s[i],hush[s[i]]++;//是坏的且首次出现
cout<<endl;
for(int i=0;i<s.size();i++)
{
cout<<s[i];
if(hush[s[i]])//是坏的
{
int j=i+k-1;//直接跳过重复的
i=j;
}
}
}