C++中兩個字串的最大合併


假設我們有兩個字串'a'和'b'以及一個字串'merge'。任務是用來自'a'和'b'的字元填充字串'merge',方式如下:

  • 如果字串'a'非空,則從字串'a'中移除第一個字元並將其複製到字串'merge'中。
  • 如果字串'b'非空,則從字串'b'中移除第一個字元並將其複製到字串'merge'中。
  • 如果字串'a'和'b'都非空,則從字串'a'中移除第一個字元並將其複製到字串'merge'中,然後從字串'b'中移除第一個字元(如果有)並將其複製到字串'merge'中。
  • 按字典順序從兩個字串中移除字元,這意味著,如果字串'a'大於字串'b',則先從字串'a'中移除字元,然後從字串'b'中移除字元。
  • 返回字串'merge'。

例如

輸入-1

a = “bacaa”

b = “abcaa”

輸出

babcacaaaa

解釋

由於給定的字串'a'按字典序大於字串'b',我們將從字串'a'中提取第一個字元,即“b”,然後從字串'b'中提取。提取後,字串將是“babcacaaaa”。

解決此問題的方法

解決此問題的遞迴方法是,我們將提取字串'a'和字串'b'的每個字元,並檢查字串'a'的字元是否按字典序大於另一個字串,最後連線到字串'merge'。

我們將找到一定位置後每個字元的子字串,如果它按字典序大於另一個字串,則將其連線到'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”。

更新於:2021年2月23日

194 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告