自己写的一个只能通过一个测试点,但是输出都没有问题。对比了满分的代码还是很疑惑,找不到问题所在。
错误代码
#include<iostream>
#include<map>
#include<vector>
using namespace std;
int main()
{
int k;
cin >> k;
string s;
cin >> s;
int cnt = 1;
map<char, int> flag;
for (int i = 0; i < s.size(); i++)
{
if (flag[s[i]] % k != 0 && flag[s[i]] != 0)
{
continue;
}
else if (s[i] != s[i + 1] && flag[s[i]] == 0)
{
flag[s[i]] = cnt;
cnt = 1;
}
else if (s[i] == s[i + 1])
{
cnt++;
continue;
}
}
vector<char> error;
for (auto it = flag.begin(); it != flag.end(); it++)
{
if (it->second % k == 0)
{
error.push_back(it->first);
cout << it->first;
}
}
cout << endl;
for (int i = 0; i < s.size(); i++)
{
cout << s[i];
for (int j = 0; j < error.size(); j++)
{
if (s[i] == error[j])
{
i += k - 1;
break;
}
}
}
}
满分代码
#include<iostream>
#include<map>
#include<vector>
#include<set>
using namespace std;
int main()
{
bool sure[300] = {false};
int k;
cin >> k;
string s;
cin >> s;
int cnt = 1;
map<char, bool> flag;
char pre = '#';
s = s + '#';
set<char> printed;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == pre)
{
cnt++;
}
else
{
if (cnt % k != 0) sure[pre] = true;
cnt = 1;
}
if (i != s.size() - 1) flag[s[i]] = (cnt % k == 0);
pre = s[i];
}
for (int i = 0; i < s.size() - 1; i++)
{
if (sure[s[i]] == true)
{
flag[s[i]] == false;
}
}
set<char> appear;
for (int i = 0; i < s.size() - 1; i++)
{
if (flag[s[i]] == true && appear.find(s[i]) == appear.end())
{
cout << s[i];
appear.insert(s[i]);
}
}
cout << endl;
for (int i = 0; i < s.size() - 1; i++)
{
cout << s[i];
if (flag[s[i]] == true)
{
i += k - 1;
}
}
}