题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960

这道题初次写的时候,思路也就是考虑从头到尾遍历一遍,然后如果一个字符重复出现k的倍数次的话,那么这个键就是坏的。

但是这样做交了一发是错的。

后来一想,如果 k = 3,然后出现了aaaba这样一个字符串,那我们并不能仅仅凭a出现了3次就认为a是一个坏键,因为如果它是坏键,那么每一次它在字符串中出现的时候出现的次数都会是k的倍数。

所以思路就变得稍微复杂一些了,用c++ stl中的set来辅助一下,多遍历一遍,第一遍遍历,将出现了k的倍数次的字符放进set中,第二次遍历,如果该字符在set中,并且该字符在某处连续出现的次数不是k的倍数,就可以判断它肯定不是坏键,则要将其取出set。set中的元素表示的就是坏键。

最后再遍历一遍,按照这些字符在字符串中出现的顺序,将坏键放入数组中。

最后一遍遍历,输出原序列。也就是对于坏键,只输出一次,然后就跳过那些因为坏键而多输出的字符,继续输出下面的字符即可。

至于如何求某个字符在某个位置连续出现的长度,就像上一篇博客,天梯赛L1-058 6翻了 一样,从后往前扫一遍,如果s【i】 == s【i+1】,那么a【i】= a【i+1】,否则a【i】就直接等于1。

代码题解:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005;
const int INF = 0x3f3f3f3f;
int k,N,mlen = INF;
string s;
int a[1005];
char seq[1005],p[1005];
int cnt = 0,num = 0;
set<char> ss,aa;
int main(){
#ifndef ONLINE_JUDGE
// freopen("in.txt","r",stdin);
#endif
scanf("%d",&k);
cin>>s;
int len = s.length();
a[len-1] = 1;
for(int i=len-2;i>=0;i--){
if(s[i] == s[i+1]) a[i] = a[i+1] + 1;
else a[i] = 1;
}
for(int i=0;i<len;){
if(a[i] % k == 0){
aa.insert(s[i]);
i += a[i];
}
else i++;
}
for(int i=0;i<len;){
if(aa.count(s[i])){
if( a[i] % k != 0 )
aa.erase(s[i]);
i += a[i];
}
else i++;
}
for(int i=0;i<len;){
p[num++] = s[i];
if(aa.count(s[i])){
if(!ss.count(s[i])){
ss.insert(s[i]);
seq[cnt++] = s[i];
}
i += k;
}
else i++;
}
for(int i=0;i<cnt;i++){
cout<<seq[i];
}cout<<endl;
for(int i=0;i<num;i++){
cout<<p[i];
}cout<<endl;
return 0;
}

最新文章

  1. 关于es5的一些新方法
  2. 周爱民:真正的架构师是没有title的(图灵访谈)
  3. html5和css3的常用参考网
  4. CSS--结构和层叠
  5. MySQL按照汉字的拼音排序,mysql汉字排序
  6. 修改Capfile,在正式环境不再使用migration修改数据库
  7. BZOJ3672 : [Noi2014]购票
  8. Java基础(56):Java---Assertion的试用(华为OJ里的Java题目的用例检测就是用的断言)
  9. Linux磁盘管理命令
  10. Tkinter教程之Radiobutton篇
  11. 【IPC通信】基于管道的popen和pclose函数
  12. JS实例2
  13. 网口扫盲三:以太网芯片MAC和PHY的关系(转)
  14. Java.lang 包 (包装类、String类、Math类、Class类、Object类)
  15. AWS探索及创建一个aws EC2实例
  16. 第194天:js---函数对象详解(arguments、length)
  17. 基于python中staticmethod和classmethod的区别(详解)
  18. security with restful
  19. 15个重要Python面试题 测测你适不适合做Python?
  20. poj 1947 树形背包 (删边)

热门文章

  1. lvm脚本
  2. 9、make和make install的区别
  3. 整理!企业选择好用的CRM系统的要点(上)
  4. redis集群搭建中遇到的一些问题
  5. centos 安装es
  6. MySQL参数配置
  7. chrome 屏蔽广告的利器
  8. fast-poster海报生成器v1.4.0,一分钟完成海报开发
  9. ESP32省电模式连接WIFI笔记
  10. Hive源码上手及问题解决