1112 Stucked Keyboard(感觉题目越往前做就越难~~)

题目: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 }

扫描二维码关注公众号,回复: 10018641 查看本文章

猜你喜欢

转载自www.cnblogs.com/keep23456/p/12537144.html