Note
-
细节!!!
-
出现次数为K的倍数
if(key[s[i]] == 0 && (cnt+1) % k == 0) key[s[i]] = -1;
-
测试点1应该是类似:3 aaabbbcccaabb
一开始判断会把a,b判断成Stucked Keyboard,但是后面又出现了不符合条件的相同字符,说明该字符不是Stucked Keyboard。此时应把之前的判断撤销(取消-1状态)。
Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
int k,i=0,cnt=0;
string s;
cin>>k>>s;
int key[200]={0};
bool vis[200]={false};
while(i<s.length()){
if(s[i]!=s[i+1]) key[s[i]]=1;
while(s[i]==s[i+1]){
cnt++,i++;
}
if(key[s[i]]==0&&(cnt+1)%k==0) key[s[i]]=-1;
else if((cnt+1)%k!=0) key[s[i]]=0;
cnt=0,i++;
}
for(int i=0;i<s.length();i++){
if(key[s[i]]==-1&&vis[s[i]]==false){
vis[s[i]]=true;
printf("%c",s[i]);
}
}
printf("\n");
i=0;
while(i<s.length()){
printf("%c",s[i]);
if(key[s[i]]==-1) i+=k;
else i++;
}
return 0;
}