【PAT】1112 Stucked Keyboard OJ入口
注意:测试点一 aaaaa_cccc_xxx,a,c连续出现的次数并非K的倍数,因此是好键,x为坏键
注意是k的倍数。 找了好久,大家接着加油。
还有注意一下输出的number有没有加s,稍微注意一下。
我的AC代码:
思想:双指针,就是i和j在str上一起走,走啊走 实时判断连续出现的字符进行处理。注意输出的时候也要利用双指针进行输出。
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
unordered_map<char, bool> mp;
set<char> v;
int main() {
int k; string str;
cin >> k >> str;
int len = str.length();
int i, j;//双指针
for (i = 0,j = 0; i < len&&j < len;) {
j = i + 1;
while (str[j] == str[i] && j<len) j++;
if ((j - i) % k != 0) mp[str[i]] = true;
//测试点一 aaaaa_cccc_xxx,a,c连续出现的次数并非K的倍数,因此是好键,x为坏键
/*if (j - i < k) mp[str[i]] = true;*/
i = j;
}
for (int i = 0; i < len; i++) {//把坏键加入set中
if (mp[str[i]] == false && v.count(str[i])==0) {
cout << str[i];
v.insert(str[i]);
}
}
cout << endl;
for (int i = 0; i < len;i++) {
if (mp[str[i]] == false) {//坏键需要判断
cout << str[i];//先输出一个元素
int j = i + 1;
while (str[j] == str[i] && j<len) j++;
if (j - i >= k) {
i += k-1;
}
}
else cout << str[i];//好键直接输出。
}
}