编程语言
首页 > 编程语言> > PAT甲级1112 Stucked Keyboard:[C++题解]卡住的键盘、双指针、去重

PAT甲级1112 Stucked Keyboard:[C++题解]卡住的键盘、双指针、去重

作者:互联网

文章目录

题目分析

在这里插入图片描述
在这里插入图片描述
来源:acwing

分析

双指针算法来统计连续出现的字符的次数,如果 %k 不为0说明不是卡住的字母,做好标记。

再次遍历字符串,坏的输出,顺便统计正常的字符串是啥。

AC代码

#include<bits/stdc++.h>
using namespace std;

const int N  = 200; //需要用到小写字母的ASCII码值
int st[N];
int main(){
    int k;
    cin >> k;
    string s;
    cin >> s;
    //双指针
    for(int i =0; i<s.size();i++){
        int j  = i + 1;
        while(j < s.size() && s[j] == s[i]) j++;
        int len = j - i ;
        if(len % k) st[s[i]] = 1; //不是坏的
        i = j -1; // i跳到j后面的位置
        
    }
    string res;
    for(int i = 0; i<s.size(); i++) {
        if(!st[s[i]]) cout<<s[i],st[s[i]] = 2; //坏的已经被输出,做好标记防止重复输出
        if(st[s[i]] == 1) res += s[i];
        else{
            res += s[i];
            i+= k-1; // 坏的仅需要加一个,所以需要跳k个
        }
    }
    cout<<endl;
    cout<<res<<endl;
    
}

在这里插入图片描述

题目来源

PAT甲级1112 Stucked Keyboard
https://www.acwing.com/problem/content/1604/

标签:题目,cout,Stucked,题解,st,int,PAT,指针
来源: https://blog.csdn.net/shizheng_Li/article/details/113853671