HDU 1515 Anagrams by Stack(DFS)

Anagrams by Stack

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值