连续相同的字符组成的字符串,若字符串长度是K的倍数,且小于K,则该字符一定是坏掉的键。
样例分析:
3
caseee1__thiiis_iiisss_a_teeeeeest
K = 3;
该字符串中的‘e’字符,出现了“eee”,“eeeeee” ,这两个字符串的长度都是K的倍数,且长度大于K,所以字符‘e’是坏掉的键;同理字符‘i‘也是。
‘s’字符,出现了“s”,“sss”, 但“s”字符串长度小于K,不满足坏掉的条件,它不是坏掉的键。
可以使用map映射,键是样例字符串的每个字符,值是每个字符对应的坏掉的情况,0或2是没坏掉,1是坏掉。
注意输入坏掉的字符,必须按在样例字符串最先找到的字符输出。
#include <bits/stdc++.h>
using namespace std;
int main() {
int k;
string str;
unordered_map<char, int> mp;
cin >> k >> str;
for(int i = 0; i < str.length(); i++) {
mp[str[i]] = 0;
}
char ch = str[0];
int cnt = 0;
for(int i = 1; i <= str.length(); i++){
cnt++;
if(ch != str[i]){
if(cnt % k != 0){
mp[ch] = 1;
}
cnt = 0;
ch = str[i];
}
}
for (int i = 0; i < str.length(); ++i) {
if(mp[str[i]] == 0){
mp[str[i]] = 2;
cout << str[i];
}
}
cout << endl;
for (int i = 0; i < str.length(); ) {
cout << str[i];
if(mp[str[i]] == 2){
i += k;
} else {
i += 1;
}
}
return 0;
}