1112 Stucked Keyboard

#include<iostream>

#include<map>

#include<set>

#include<string>

using namespace std;

bool sureNobroken[256];

int main(){

int k,cnt=1;

cin>>k;//字符出现次数的阈值

string s;

cin>>s;

map<char,bool>m;//记录是否为坏键

set<char>printed;//记录已经输出的字符

char pre='#';

s=s+'#';

//第一次遍历,标记可能坏掉的键

for(int i=0;i<s.length();i++){

if(s[i]==pre){

cnt++;

}else{

//如果连续出现的不是k的倍数,说明不是坏键

if(cnt%k!=0){

sureNobroken[pre]=true;

}

cnt=1;

}

//如果当前出现的字符数是k的倍数,表示其为坏键

if(i!=s.length()-1){

m[s[i]]=(cnt%k==0);

}

pre=s[i];//更新前一个字符

}

//第二次遍历,修正标记

for(int i=0;i<s.length()-1;i++){

if(sureNobroken[s[i]]){

m[s[i]]=false;

}

}

//输出所有坏键

for(int i=0;i<s.length()-1;i++){

if(m[s[i]]&&printed.find(s[i])==printed.end()){

cout<<s[i];

printed.insert(s[i]);

}

}

cout<<endl;

//输出修正后的字符

for(int i=0;i<s.length()-1;i++){

cout<<s[i];

if(m[s[i]]){

i=i+k-1;

}

}

return 0;

}

相关推荐
AI进化营-智能译站3 分钟前
ROS2 C++开发系列13-运算符重载让ROS2消息处理更自然
java·开发语言·c++·ai
AI科技星4 分钟前
《全域数学》第一部 数术本源 第三卷 代数原本第14篇 附录二 猜想证明【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
Wect18 分钟前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·typescript
zhouwy11318 分钟前
Poco 与 libevent 网络编程
c++
憨波个26 分钟前
【说话人日志】DOVER-Lap:overlap-aware diarization 输出融合算法
人工智能·深度学习·算法·音频·语音识别
叼烟扛炮33 分钟前
C++第四讲:类和对象(下)
c++·算法·类和对象
Rabitebla33 分钟前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
代码不停1 小时前
BFS解决floodfill算法题目练习
算法·宽度优先
上弦月-编程1 小时前
C语言指针从入门到实战
java·jvm·算法
WL_Aurora1 小时前
Python 算法基础篇之树和二叉树
python·算法