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