我正在努力解决下面的问题但无法找到正确的解决方案
给定两个字符串,即xyzabc找到所有可以用这两个字符串形成的字符串。一个限制是每个字符串中的字符序列应该保持不变。
示例:

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

10-01 06:31
查看更多