1112. Stucked Keyboard 解析

来源:互联网 发布:魔兽世界7.25mac版插件 编辑:程序博客网 时间:2024/06/06 17:00

这个题卡了好久..

之前没有理解好题意,卡住的一定是卡N次,如果那个按键有没有重复N次的情况就不算卡住。

我是靠不相同的时候判定重复次数的,这时候会出现一个特例,末尾是连续的。

例如:

3

aaaeee

这个时候末尾没有不相同的了。所以追加了一个单独的判定。

#include <iostream>#include <string>#include <cstring>#include <vector>#include <queue>#include <set>#include <map>using namespace std;int n;string s;queue <char> q;bool isVis[256];bool NotStack[256];bool isAns[256];int main() {cin >> n >> s;memset(isVis, false, sizeof(isVis));memset(NotStack, false, sizeof(NotStack));memset(isAns, false, sizeof(isAns));int p = 1, pre = 0;int times = 1;//遍历整个字符串 确定可能的串while (p < s.size()) {if (s[p] != s[pre]){if ((p - pre) % n == 0 && !isVis[int(s[pre])]) {//可能卡住且没有访问过q.push(s[pre]);isVis[int(s[pre])] = true;}pre = p;}if (p == s.size() - 1 && s[p] == s[pre] && (p - pre + 1) == n && !isVis[int(s[pre])]) {//最后一个单独处理//例如3 aaaeee最后一个不相同不会判定出来q.push(s[pre]);isVis[int(s[pre])] = true;}p++;}//遍历整个字符串 排除没有卡住的p = 1, pre = 0;while (p < s.size()) {if (s[p] != s[pre]) {if ((p - pre) % n != 0) {//没有卡住NotStack[int(s[pre])] = true;}pre = p;}p++;}//剔除没有卡住的键vector <char> fin;while (!q.empty()) {if (!NotStack[int(q.front())]) {fin.push_back(q.front());isAns[int(q.front())] = true;}q.pop();}//输出for (int i = 0; i < fin.size(); i++) {cout << fin[i];}cout << endl;for (int i = 0; i < s.size();i++) {cout << s[i];if (isAns[int(s[i])]) {i = i + n - 1;}}return 0;}


0 0
原创粉丝点击