描述:
通过栈交换字母顺序。给定两个字符串,要求所有的进栈和出栈序列(i表示进栈,o表示出栈),使得字符串2在求得的进出栈序列的操作下,变成字符串1。输出结果需满足字典序。例如TROT 到 TORT:
[
i i i i o o o o
i o i i o o i o
]
输入:
给定两个字符串,第一个字符串是源字符串,第二个字符是目标目标字符串。
输出:
所有的进栈和出栈序列,输出结果需满足字典序
输入样例:
madam
adamm
bahama
bahama
long
short
eric
rice
输出样例:
[
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
]
题解:
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
char str1[20], str2[20];
stack <char> a;
char ans[40];
int len1, len2;
void dfs(int t, int num1, int num2);
void output();
int main()
{
while (cin >> str1 >> str2)
{
len1 = strlen(str1);
len2 = strlen(str2);
cout << "[" << endl;
if (len1 == len2)
{
dfs(0, 0, 0);
}
cout << "]" << endl;
}
}
void dfs(int t, int num1, int num2)
{
if (t == 2 * len1)
{
output();
return;
}
if (num1 < len1)
{
ans[t] = 'i';
a.push(str1[num1]);
dfs(t + 1, num1 + 1, num2);
a.pop();
}
if (!a.empty() && a.top() == str2[num2])
{
ans[t] = 'o';
char temp = a.top();
a.pop();
dfs(t + 1, num1, num2 + 1);
a.push(temp);
}
}
void output()
{
for (int i = 0; i < 2 * len1 - 1; i++)
{
cout << ans[i] << " ";
}
cout << ans[2 * len1 - 1] << endl;
}
标签:1143,进栈,NOJ,int,str2,字母,字符串,include,str1
From: https://www.cnblogs.com/hello33mao/p/17734880.html