题目大意:
给出一个正整数k,再给出一个字符串,若这个字符串中的某个字符总是连续出现k(1<k<=100)个,则这个字符是“坏”的,我们需要在最后输出所有“坏”的字符,然后输出正确的字符串,也就是只保留一个“坏”的字符。
代码如下:
#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;
string s;
int k;
map<char,int> m;
map<char,int> mm;
vector<char> vec;
int main(){
cin>>k>>s;
int len=s.length();
char last=s[0];
m[s[0]]++;
for(int i=1;i<len;i++){
if(s[i]!=last){
if(m[last]!=k){
m[last]=0;
}
}
m[s[i]]++;
if(m[s[i]]>k){
m[s[i]]=1;
}
last=s[i];
}
int cnt=0;
while(cnt<len){
if(m[s[cnt]]==k){
int temp=mm[s[cnt]];
if(temp==0){
vec.push_back(s[cnt]);
}
mm[s[cnt]]=1;
cnt+=k;
}else{
cnt++;
}
}
for(int i=0;i<vec.size();i++){
cout<<vec[i];
}
cout<<endl;
cnt=0;
while(cnt<len){
if(m[s[cnt]]==k){
cout<<s[cnt];
cnt+=k;
}else{
cout<<s[cnt];
cnt++;
}
}
return 0;
}