题目链接 https://vjudge.net/problem/HihoCoder-1671
【思路】
类似括号匹配,递归函数的妙用。le,ri记录括号的相对位置。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5000050;
int len;
char s[maxn];
int st[maxn], top = -1;
int le[maxn], ri[maxn];
void dfs(int l, int r, bool rev) {
if (!rev) {
for (int i = l; i <= r; ++i) {
if ('(' != s[i]) printf("%c", s[i]);
else {
dfs(i + 1, ri[i] - 1, 1);
i = ri[i];
}
}
}
else {
for (int i = r; i >= l; --i) {
if (')' != s[i]) printf("%c", s[i]);
else {
dfs(le[i] + 1, i - 1, 0);
i = le[i];
}
}
}
}
int main() {
scanf("%s", s);
len = strlen(s);
for (int i = 0; i < len; ++i) {
if ('(' == s[i]) st[++top] = i;
else if (')' == s[i]) {
le[i] = st[top];
ri[st[top]] = i;
--top;
}
}
dfs(0, len - 1, 0);
printf("\n");
return 0;
}