我正在努力解决下面的问题但无法找到正确的解决方案
给定两个字符串,即xyz
和abc
找到所有可以用这两个字符串形成的字符串。一个限制是每个字符串中的字符序列应该保持不变。
示例:
xyabzc - Valid
xabcyz - Valid
abcxyz - Valid
xyzacb - Invalid. (b cannot come before c)
我试了以下几点,
将两个字符串连接成一个新字符串。得到了字符串的所有排列,并删除了不遵循上述约束的排列。我知道这很模糊,但这是我唯一想到的解决办法。
请提出一个更好的方法。
最佳答案
用递归可以很容易地解决这个问题在每个步骤中,您可以添加第一个字符串中的字符或第二个字符串中的字符。
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