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

PAT甲级 1112 Stucked Keyboard的更多相关文章

  1. PAT甲级——1112 Stucked Keyboard (字符串+stl)

    此文章同步发布在我的CSDN上:https://blog.csdn.net/weixin_44385565/article/details/90041078   1112 Stucked Keyboa ...

  2. PAT 甲级 1112 Stucked Keyboard

    https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960 On a broken keyboard, ...

  3. PAT甲级——A1112 Stucked Keyboard【20】

    On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the char ...

  4. PAT 1112 Stucked Keyboard

    1112 Stucked Keyboard (20 分)   On a broken keyboard, some of the keys are always stucked. So when yo ...

  5. PAT 1112 Stucked Keyboard[比较]

    1112 Stucked Keyboard(20 分) On a broken keyboard, some of the keys are always stucked. So when you t ...

  6. 1112 Stucked Keyboard (20 分)

    1112 Stucked Keyboard (20 分) On a broken keyboard, some of the keys are always stucked. So when you ...

  7. 【刷题-PAT】A1112 Stucked Keyboard (20 分)

    1112 Stucked Keyboard (20 分) On a broken keyboard, some of the keys are always stucked. So when you ...

  8. 【PAT甲级】1112 Stucked Keyboard (20分)(字符串)

    题意: 输入一个正整数K(1<K<=100),接着输入一行字符串由小写字母,数字和下划线组成.如果一个字符它每次出现必定连续出现K个,它可能是坏键,找到坏键按照它们出现的顺序输出(相同坏键 ...

  9. PAT甲题题解-1112. Stucked Keyboard (20)-(map应用)

    题意:给定一个k,键盘里有些键盘卡住了,按一次会打出k次,要求找出可能的坏键,按发现的顺序输出,并且输出正确的字符串顺序. map<char,int>用来标记一个键是否为坏键,一开始的时候 ...

随机推荐

  1. 无向图(邻接表实现)DFS_AND_BFS

    数据结构选择TreeSet的原因:通过自定义的Compare方法,保证了点元素的唯一性,有序性(方便检验): 传入Set和Map中的元素类似于C中的指针操作,即共享地址,改变其中一个中的元素,与之相关 ...

  2. Redis 底层数据结构之跳跃表

    文章参考 <Redis 设计与实现>黄建宏 Redis(2) 跳跃表 跳跃表 跳跃表 skiplist 是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节 ...

  3. Raspberry Pi:树莓派安装基础系统 Raspberry Pi(树莓派系统)

    准备材料 树莓派4B 树莓派系统镜像 SDFormatter (格式化工具) Win32DiskImager (镜像拷录工具) 镜像下载 Rspberry Pi (2020-08-24版本比较稳定) ...

  4. 面试:Spring面试知识点总结

    Spring知识点总结 1. 简介一下Spring框架. 答:Spring框架是一个开源的容器性质的轻量级框架.主要有三大特点:容器.IOC(控制反转).AOP(面向切面编程). 2. Spring框 ...

  5. kafka 安装和配置

    转载自:https://www.cnblogs.com/heijinli/p/13545182.html 下载及安装  第一步:进入kafka官网  按照自己的需求选择版本,我这里选择 最新版的 2. ...

  6. 2012年第三届蓝桥杯C/C++程序设计本科B组省赛题目 海盗比酒量 结果填空

    ** 一.题目 ** 海盗比酒量 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复- 直到开了第4瓶酒,坐 ...

  7. 《PHP安全编程系列》系列分享专栏

    PHP安全编程系列收藏夹收藏了有关PHP安全编程方面的知识,对PHP安全编程提供学习参考 <PHP安全编程系列>已整理成PDF文档,点击可直接下载至本地查阅https://www.webf ...

  8. Django基础005-Django开发的整体过程

    1.写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:id ...

  9. 5000字2021最新Python基础知识第一阶段:数据类型

    1 编程规范 注释 python注释也有自己的规范,在文章中会介绍到.注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的 ...

  10. python 字典添加数据

    dzkuaa={}#类似{"张三":2,"李四":3} for i in range(23): ming=bj[i] if dzkuaa.get(ming)== ...