题意:坏掉的键若被按下,总是重复打出k次。比如,k为3,打出的序列如下——
thiiis iiisss a teeeeeest
坏掉的键是i和e,虽然iiisss中s也出现了3次,但它不是坏掉的键,因为在thiiis中,s值出现了一次,若s是坏掉的键,则每次必须都出现3次。
思路:【字符串处理】
遍历字符串,针对每个字符,统计其连续重复出现的个数(记为len)
1)若len%k==0,说明字符ch可能是坏键。注意,只是可能,并不一定是坏键。
2)若len%≠0,说明字符ch一定是好键。
我是这么处理的——初始化Hash[128]为-1,Hash[]的下标即字符的ASIIC码,可以直接把char类型的当做下标。若遇到情况(2),则可以确定该键是好键,标记Hash[ch]=1;若遇到情况(1),除了判断len%k,还要满足Hash[ch]!=1,即当且仅当字符ch满足len%k==0且确定它不是好键时,才断定它为坏键。处理如"aabbbaaa"的情况。

代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
#define GOOD 1
#define BAD 0

int main()
{
    int k;
    cin>>k;
    string str;
    cin>>str;
    ];
    fill(Hash,Hash+,-);
    ;
    while(i<str.size()){
        int s=i;
        char ch=str[i];
        while(i<str.size() && str[i]==ch) i++;
        int len=i-s;
         && Hash[ch]!=GOOD)//当前字符ch恰出现k的整数倍次,且确定不是好键,针对如"aabbbaaa"        Hash[ch]=BAD;
        else         Hash[ch]=GOOD;
    }

    i=;
    string oriStr;
    while(i<str.size()){
        oriStr+=str[i];
        if(Hash[str[i]]!=GOOD) {
            if(Hash[str[i]]==BAD){
                cout<<str[i];
                Hash[str[i]]=;//避免坏键重复输出
            }
            i+=k;
        }else{
            i++;
        }
    }
    cout<<"\n"<<oriStr;
    ;
}

  

1112 Stucked Keyboard的更多相关文章

  1. PAT 1112 Stucked Keyboard

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

  2. 1112 Stucked Keyboard (20 分)

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

  3. PAT 1112 Stucked Keyboard[比较]

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

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

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

  5. PAT 甲级 1112 Stucked Keyboard

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

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

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

  7. PAT (Advanced Level) 1112. Stucked Keyboard (20)

    找出一定没问题的字符(即一连串的额字符x个数能被k整除的),剩下的字符都是可能有问题的. #include<cstdio> #include<cstring> #include ...

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

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

  9. PAT甲级 1112 Stucked Keyboard

    题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805357933608960 这道题初次写的时候,思路也就是考虑 ...

随机推荐

  1. 在一个web 应用中,改变url无非是2种方式,一种是利用超链接进行跳转,另一种是使用浏览器的前进和回退功能

    在一个web 应用中,改变url无非是2种方式,一种是利用超链接进行跳转,另一种是使用浏览器的前进和回退功能 https://www.jianshu.com/p/27ee7df4ccc1

  2. react:reducer-creator

    function createReducer(initialState, handlers) { return function reducer(state = initialState, actio ...

  3. 2017.10.26 ECN + product spec+ cypress ble module test+

    1 ECN Ecn  should be issued when modifying drawing,Copy children BOM of subassembly from BIL if one ...

  4. jQuery的width()、innerWidth()、outerWidth()方法

    width(): 不包括元素的外边距(margin).内边距(padding).边框(border)等部分的宽度. innerWidth(): 包括元素的内边距(padding),但不包括外边距(ma ...

  5. TCP中的服务端与客户端的实现

    TCP中首先要在服务端开启监听,这样才可以从客户端链接 using System; using System.Collections.Generic; using System.Linq; using ...

  6. win7/8 关闭非正常关机的自动修复功能

    win7/8 关闭非正常关机的自动修复功能 1.桌面右键新建一个文档文本,双击打开文件新建文本文档,复制以下命令到文本里面! bcdedit /set {default} bootstatuspoli ...

  7. cursor光标类型

    今天早上在网上看到一篇关于光标类型的总结代码,很好,特定拿来: 最终结果: 代码: <!DOCTYPE html> <html lang="zh-cn"> ...

  8. linux 下看所有用户 及所有组

    俺的centos vps上面不知道添加了多少个账户,今天想清理一下,但是以前还未查看过linux用户列表,google了一下,找到方便的放:一般情况下是 cat /etc/passwd 可以查看所有用 ...

  9. Oracle 实用技巧

    一.rlwrap 在 linux中使用sqlplus对数据库进行操作,常常由于敲错命令或需要反复执行某条语句,需要像linux本身有的历史回调的功能, rlwrap 可以用来支持oracle下sqlp ...

  10. Git 下载、安装与SSH配置

    一.Git学习笔记(基于Github) Git简介 Git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也因此其近乎所有的操作都 ...