C ++中两个字符串的最大合并

让我们假设我们有两个字符串“ a”和“ b”以及一个字符串“ merge”。任务是用“ a”和“ b”中的字符填充字符串“ merge”,

  • 如果字符串“ a”非空,则从字符串“ a”中删除第一个字符,然后将其复制到字符串“ merge”中。

  • 如果字符串“ b”为非空,则从字符串“ b”中删除第一个字符,然后将其复制到字符串“ merge”中。

  • 如果字符串“ a”和“ b”非空,则从字符串“ a”中删除第一个字符并将其复制到字符串“ merge”中,然后从字符串“ b”中删除第一个字符(如果有)并复制它进入字符串“合并”。

  • 从字典顺序上删除两个字符串中的字符,这意味着,如果字符串“ a”大于字符串“ b”,则从字符串“ a”中删除字符,然后从字符串“ b”中删除。

  • 返回字符串“合并”。

例如

输入1

             a =“ bacaa”

             b =“ abcaa”

输出:  babcacaaaa

说明: 由于给定的字符串“ a”在字典上大于字符串“ b”,因此我们将从字符串“ a”(即“ b”)中提取第一个字符,然后从字符串“ b”中提取。提取后,字符串将为“ babcacaaaa”。

解决这个问题的方法

解决此问题的递归方法是,我们将提取字符串'a'和字符串'b'的每个字符,并检查字符串'a'的字符在字典上是否大于其他字符串,最后连接到字符串'merge' 。

我们将在多个位置后找到每个字符的子字符串,如果在字典上大于另一个字符串,则将其合并为“合并”。

  • 取两个输入字符串“ a”和“ b”。

  • 递归字符串函数concatenateLargest(string a, string b)将两个字符串作为输入,并在串联后返回最大字符串,即(字符串'a'+字符串'b')。

  • 如果两个字符串均为空,则返回字符串'a'+字符串'b'。

  • 如果字符串“ a”小于或等于字符串“ b”,则提取第一个字符并为其他字符递归调用该函数。

  • 如果字符串“ b”小于或等于字符串“ b”,则提取第一个字符并为其他字符递归调用该函数。

  • 返回串联的字符串。

示例

#include <bits/stdc++.h>

using namespace std;

string concatenateLargest(string a, string b) {

   if (a.size() == 0 or b.size() == 0) {

      return (a + b);

   }

   if (a <= b)

      return b[0] + concatenateLargest(a, b.substr(1));

   else

      return a[0] + concatenateLargest(a.substr(1), b);

}

int main() {

   string a = "bacaa";

   string b = "abcaa";

   cout << concatenateLargest(a, b) << endl;

   return 0;

}

运行上面的代码将生成如下输出:

输出结果

bacabcaaaa

根据给定的问题合并后,两个字符串“ bacaa”和“ abcaa”将变为“ bacabcaaaa”。

以上是 C ++中两个字符串的最大合并 的全部内容, 来源链接: utcz.com/z/329755.html

回到顶部