#include <bits/stdc++.h>
using namespace std;
const int maxn = 200;
char s[maxn];
char t[maxn];
char st[maxn];
char ans[2*maxn];
int len;
int top;
int idx;
void dfs(int ls, int lt) {
if(ls == len && lt == len) {//target字符串已完
for(int i = 0; i < idx; ++i)
printf("%c ", ans[i]);
printf("\n");
return;
}
if(ls < len) {//source not reach the end
ans[idx++] = 'i';//can in stack
st[top] = s[ls];
top++;
ls++;
dfs(ls, lt);
top--;//backtrace
ls--;
idx--;
}
if(lt < len && top > 0 && st[top-1] == t[lt]) {//can out stack
ans[idx++] = 'o';
char c = st[top-1];//记录栈顶的元素,等会要回复,这个地方容易掉
top--;
lt++;
dfs(ls, lt);
st[top] = c;
top++;//backtrace
lt--;
idx--;
}
}
int main( ) {
//freopen("data.in", "r", stdin);
while(scanf("%s %s", s, t) == 2) {
//printf("%s\n", s);
//printf("%s\n", t);
printf("[\n");
if((len = strlen(s)) != strlen(t)) {
printf("]\n");
continue;
}
top = 0;
idx = 0;
memset(st, '$', sizeof(st));
memset(ans, '$', sizeof(ans));
dfs(0, 0);
printf("]\n");
}
return 0;
}
HDU 1515 Anagrams by Stack(DFS)
最新推荐文章于 2021-04-20 19:34:16 发布