按要求模拟了一下,能过给的两个样例,但是过不了后台数据:
#include <bits/stdc++.h>
using namespace std;
string s;
const int N = 1e6 + 10;
int cnt[N];
int flag, index;
void solve() {
for (int i = 1; i < s.size() - 1; i++) {
if (s[i - 1] == s[i] && s[i] != s[i + 1]) {
//删除后两个
cnt[i] = cnt[i + 1] = -1;
} else if (s[i] == s[i + 1] && s[i] != s[i - 1]) {
//删除前两个
cnt[i - 1] = cnt[i] = -1;
}
}
for (int i = 0; i < s.size(); i++) {
if (cnt[i] == 0) {
flag = 1;
index = cnt[i];
}
}
if (flag)
cout << s[index];
else {
cout << "EMPTY" << endl;
return;
}
}
int main() {
cin >> s;
solve();
return 0;
}
因为n是1e6,所以我们必须要写一个O(n)的算法。