noj算法设计题——字母转换

来源:互联网 发布:windows键没反应怎么办 编辑:程序博客网 时间:2024/06/12 21:50

字母转换

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

通过栈交换字母顺序。给定两个字符串,要求所有的进栈和出栈序列(i表示进栈,o表示出栈),使得字符串2在求得的进出栈序列的操作下,变成字符串1。输出结果需满足字典序。例如TROT 到 TORT:
[
i i i i o o o o
i o i i o o i o
]

输入:

给定两个字符串,第一个字符串是源字符串,第二个字符是目标目标字符串。

输出:

所有的进栈和出栈序列,输出结果需满足字典序

输入样例:

madamadammbahamabahamalongshortericrice

输出样例:

[i i i i o o o i o o i i i i o o o o i o i i o i o i o i o o i i o i o i o o i o ][i o i i i o o i i o o o i o i i i o o o i o i o i o i o i o i i i o o o i o i o i o i o i o i o ][][i i o i o i o o

]

C++代码如下:

#include <iostream>#include <string>#include <stack>using namespace std;string src, dst, str_io;void MatchString(void){    stack<char> io;    string temp;    string::size_type i, j = 0;    for (i = 0; i < str_io.size(); ++i)    {        if (str_io[i] == 'i')        io.push(src[j++]);        else        {            temp += io.top();            io.pop();        }    }    if (temp == dst)    {        for (i = 0; i < str_io.size(); ++i)        cout << str_io[i] << " ";        cout << endl;    }}void ConvertString(int step, int count, int i_sum){    if (step == src.size() * 2)    MatchString();    else    {        if (i_sum < static_cast<int> (src.size()))        {            str_io += 'i';            ++count;            ++i_sum;            ConvertString(step + 1, count, i_sum);            --count;            --i_sum;            str_io.resize(str_io.size() - 1);        }        if (count > 0)        {            str_io += 'o';            --count;            ConvertString(step + 1, count, i_sum);            str_io.resize(str_io.size() - 1);            ++count;        }    }}int main(int argc, char *argv[]){    while (cin >> src >> dst)    {        cout << "[" << endl;        ConvertString(0, 0, 0);        cout << "]" << endl;    }    return 0;}

0 0
原创粉丝点击