题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960
分析:
首先,遍历字符串str,筛选出所有好键,判断好键方法:如果当前字符连续出现的次数不是 k的整数倍,那么标记该字符为好键。
然后,定义一个字符串ans,再次遍历字符串str,如果字符是好键,那么直接拼接到ans,否则,只输出一次坏键字符,然后拼接坏键。
输入样例
3
aaaaaabbbcccdddabc
输出样例
d
aaaaaabbbcccdabc
1 #include<iostream> 2 #include<unordered_map> 3 using namespace std; 4 5 int main() { 6 int k,hashtable[300] = {0}; 7 cin>>k; 8 string str,ans; 9 cin>>str; 10 unordered_map<char,bool> correct; 11 for(int i = 0; i < str.size(); ++i) { //把所有好键筛选出来 12 int j = i+1; 13 while(j < str.size() && str[i] == str[j]) ++j; 14 if((j-i)%k == 0) i = j-1;//不清楚 15 else correct[str[i]] = true; //好键 16 } 17 for(int i = 0; i < str.size(); ++i) { 18 if(correct[str[i]]) ans += str[i]; 19 else { 20 if(hashtable[str[i]] == 0) { 21 hashtable[str[i]] = 1; 22 printf("%c",str[i]); 23 } 24 i = i+k-1; 25 ans += str[i]; 26 } 27 } 28 printf("\n"); 29 cout<<ans<<endl; 30 return 0; 31 }