字符串处理问题,参考了柳婼的代码。
柳神代码链接
坑点如下
1,本题在字符串末尾再添加一个字符,否则当最后几个字符相等时存在判断问题。(当不相等时才能做出判断)
2,我的方法,将可能存在问题的字符放入set容器,开nobroken数组存放一定没坏的键。最后判断时将set中有而nobroken中没有的输出即可
整体代码如下
#include<bits/stdc++.h>
using namespace std;
bool nobroken[256];
int main(){
int k;
scanf("%d",&k);
map<char,bool>mp;
set<char>printed,mbroken;
string l;
cin>>l;
char pre='#';
l=l+pre;
int cnt=1;
for(int i=0;i<l.size();i++){
if(l[i]==pre)
cnt++;else{
if(cnt%k!=0)
{nobroken[pre]=true;
pre=l[i];
cnt=1;}else{
mbroken.insert(pre);
pre=l[i];
cnt=1;
}
}
}
for(int i=0;i<l.size()-1;i++){
if(mbroken.find(l[i])!=mbroken.end()&&printed.find(l[i])==printed.end()&&nobroken[l[i]]==false)
{
printf("%c",l[i]);
printed.insert(l[i]);
}
}
printf("\n");
for(int i=0;i<l.size()-1;i++){
printf("%c",l[i]);
if(printed.find(l[i])!=printed.end())
i=i+k-1;
}
return 0;
}