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;

}

相关推荐
dcmfxvr10 分钟前
adwawd
算法
啊阿狸不会拉杆19 分钟前
《数字信号处理 》第 7 章-无限长单位冲激响应 (IIR) 数字滤波器设计方法
数据结构·算法·信号处理·数字信号处理·dsp
IT_Octopus23 分钟前
力扣热题100 20. 有效的括号
算法·leetcode
木井巳25 分钟前
【递归算法】求根节点到叶节点数字之和
java·算法·leetcode·深度优先
想进个大厂29 分钟前
代码随想录day29 贪心03
算法·leetcode·职场和发展
We་ct1 小时前
LeetCode 15. 三数之和:排序+双指针解法全解析
前端·算法·leetcode·typescript
挽天java1 小时前
数据结构习题--寻找旋转排序数组中的最小值
数据结构·算法·排序算法
你怎么知道我是队长1 小时前
C语言---排序算法4---希尔排序法
c语言·算法·排序算法
iAkuya1 小时前
(leetcode)力扣100 54实现Trie树
算法·leetcode·c#
「QT(C++)开发工程师」1 小时前
C++ 多种单例模式
java·c++·单例模式