zoukankan      html  css  js  c++  java
  • hdu 1515 Anagrams by Stack

    题解:

    第一:两个字符不相等(即栈顶字符与目标字符不相等);这种情况很容易处理,将匹配word的下一个字符入栈,指针向后挪已为继续递归。

    第二:两个字符相等(即栈顶字符与目标字符相等);这种情况有两种选择

          (1)字符出栈,并将目标word的指针向后挪一位,继续递归;

          (2)将匹配word的下一个字符入栈,指针向后挪一位,继续递归;

    每一次递归用path记录下来路径。当目标word的指针超过最后一位了,说明成功,此时将path输出。

    #include<stdio.h>
    #include<string.h>
    #include<stack>
    using namespace std;
    char str1[1005],str2[1005];
    int len1,len2;
    char path[2005];
    void test(int x,int y,stack<char> st,int t)
    {
        int j;
    
        if(y==len2)
        {
            printf("i ");
            for(j=0; j<t; j++)
                printf("%c ",path[j]);
            printf("
    ");
            return ;
        }
        if(st.empty ())
        {
            st.push(str1[x+1]);
            path[t]='i';
            test(x+1,y,st,t+1);
            st.pop();
            return ;
        }
        char cur=st.top ();
        if(x==len1 && cur!=str2[y])
            return ;
    
        st.push(str1[x+1]);
        path[t]='i';
        test(x+1,y,st,t+1);
        st.pop();
    
        if(cur==str2[y])
        {
            st.pop();
            path[t]='o';
            test(x,y+1,st,t+1);
            st.push(str1[x]);
        }
        return ;
    }
    int main()
    {
        int i,j;
        while(scanf("%s%s",str1,str2)!=EOF)
        {
            len1=strlen(str1);
            len2=strlen(str2);
            printf("[
    ");
            if(len1<len2)
            {
                printf("]
    ");
                continue;
            }
            stack<char> st;
            st.push(str1[0]);
            test(0,0,st,0);
            printf("]
    ");
        }
        return 0;
    }
  • 相关阅读:
    量化交易指标函数整理(持续更新)
    Python之基础练习代码
    根据缺口的模式选股买股票,python 学习代码
    凯利公式
    测试
    AngularJS开发经验
    Hibernate Tools插件的使用
    weblogic配置oracle数据源
    eclipse配置weblogic服务器
    java算法-数学之美二
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3349611.html
Copyright © 2011-2022 走看看