我当时是乱搞过的
乱搞代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <sstream>
#include <cstring>
#include <set>
#include <cctype>
#define IO \
ios::sync_with_stdio(false); \
// cin.tie(0); \
// cout.tie(0);
using namespace std;
typedef long long LL;
const int maxn = 3e5 + 10;
const int maxm = 1e7 + 10;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
int dis[8][2] = {0, 1, 1, 0, 0, -1, -1, 0};
string s;
bool ok()
{
int L = 0;
int R = 0;
if (s.size() >= 2)
{
for (int i = 1; i < s.size(); i++)
{
if (s[i] == s[i - 1])
++R;
else
{
if (R - L + 1 >= 2)
{
if ((R - L + 1) & 1)
s.erase(L, R - L);
else
s.erase(L, R - L + 1);
return true;
}
else
R = i, L = i;
}
}
}
if (R - L + 1 >= 2)
{
if ((R - L + 1) & 1)
s.erase(L, R - L);
else
s.erase(L, R - L + 1);
return true;
}
return false;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
IO;
cin >> s;
while (1)
{
if (!ok())
break;
}
if (s.size() == 0)
cout << 0;
else
cout << s;
return 0;
}
其实正解应该是用栈来做!只需要扫一遍,复杂度O(n)!
字符和当前栈顶元素不一样,进栈,否则出栈栈顶元素,最后再搞一个栈把元素倒过来。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <sstream>
#include <cstring>
#include <set>
#include <cctype>
#define IO \
ios::sync_with_stdio(false); \
// cin.tie(0); \
// cout.tie(0);
using namespace std;
typedef long long LL;
int dis[8][2] = {0, 1, 1, 0, 0, -1, -1, 0};
const int maxn = 1e6 + 5;
const int maxm = 1e6 + 10;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
const LL mod = 998244353;
double eps = 1e-7;
using namespace std;
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in.txt", "r", stdin);
#endif
string s;
cin >> s;
stack<char> s1, s2;
for (int i = 0; i < s.size(); i++)
{
if (s1.empty())
s1.push(s[i]);
else
{
char ch = s1.top();
if (ch == s[i])
s1.pop();
else
s1.push(s[i]);
}
}
if (s1.empty())
cout << 0;
else
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
while (!s2.empty())
{
cout << s2.top();
s2.pop();
}
}
return 0;
}