我正在尝试解决以下问题。但无法提出正确的解决方案
给出两个字符串xyz
和abc
。找到可以用这两个字符串形成的所有字符串。一个限制是每个字符串中的字符序列应保持不变。
示例:
xyabzc - Valid
xabcyz - Valid
abcxyz - Valid
xyzacb - Invalid. (b cannot come before c)
我尝试了以下内容,
将两个字符串连接成一个新字符串。获得字符串的所有排列并删除不遵循上述约束的那些。我知道这很模糊,但这是我提出的唯一解决方案。
请建议更好的方法。
答案 0 :(得分:8)
您可以使用递归轻松解决此问题。在每个步骤中,您可以添加第一个字符串中的字符或第二个字符串中的字符。
C ++代码 -
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string s1, s2; //Input strings
vector <string> v; //To store resultant strings
void merge_strings(int i,int j,string res)
{
if(i == s1.length() && j == s2.length())
v.push_back(res);
if(i < s1.length())
merge_strings(i + 1,j,res + s1[i]);
if(j < s2.length())
merge_strings(i,j + 1,res + s2[j]);
}
int main()
{
s1 = "abc";
s2 = "xyz";
merge_strings(0,0,"");
for(string s : v)
cout << s << endl;
return 0;
}
输出 -
abcxyz
abxcyz
abxycz
abxyzc
axbcyz
axbycz
axbyzc
axybcz
axybzc
axyzbc
xabcyz
xabycz
xabyzc
xaybcz
xaybzc
xayzbc
xyabcz
xyabzc
xyazbc
xyzabc