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(stringa,stringb)将两个字符串作为输入,并在串联后返回最大字符串,即(字符串'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”。