WA on #21
#include<bits/stdc++.h>
using namespace std;
struct Node {
char data;
int next, pre;
} s[200100], t[200100];
int s_s = 1, t_s = 1;
string a;
void del(Node *s, int i) {
s[i].next = s[s[i].next].next;
s[s[i].next].pre = i;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> a;
int x = a.size();
for (int i = 0; i < (int)a.size(); i++) {
s[i + 1].data = a[i];
s[i + 1].next = i + 2;
if (i == (int)a.size() - 1) s[i + 1].next = 0;
s[i + 1].pre = i;
}
cin >> a;
if (x > (int)a.size()) {
cout << "No";
return 0;
}
for (int i = 0; i < (int)a.size(); i++) {
t[i + 1].data = a[i];
t[i + 1].next = i + 2;
if (i == (int)a.size() - 1) t[i + 1].next = 0;
t[i + 1].pre = i;
}
for (int i = s_s; i; i = s[i].next)
if (s[i].data == s[s[i].pre].data && s[i].data == s[s[i].next].data) {
del(s, i);
i = s[i].pre;
}
for (int i = t_s; i; i = t[i].next)
if (t[i].data == t[t[i].pre].data && t[i].data == t[t[i].next].data) {
del(t, i);
i = t[i].pre;
}
int i = s_s, j = t_s;
for (; i && j; i = s[i].next, j = t[j].next) if (s[i].data != t[j].data) {
cout << "No\n";
return 0;
}
if (i || j) {
cout << "No\n";
return 0;
}
cout << "Yes\n";
return 0;
}
主要思路就是把s和t都删掉能删的,然后对比是否相等,用的手写链表。
补丁有点小多