【PAT】1112 Stucked Keyboard

【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];//好键直接输出。
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39072627/article/details/107477342
今日推荐