Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 문자열의 최대 병합

<시간/>

두 개의 문자열 'a'와 'b'와 문자열 'merge'가 있다고 가정해 보겠습니다. 작업은 다음과 같은 방식으로 'a'와 'b'의 문자로 'merge' 문자열을 채우는 것입니다.

  • 'a' 문자열이 비어 있지 않은 경우 'a' 문자열에서 첫 번째 문자를 제거하고 'merge' 문자열에 복사합니다.
  • 'b' 문자열이 비어 있지 않은 경우 'b' 문자열에서 첫 번째 문자를 제거하고 'merge' 문자열에 복사합니다.
  • 문자열 'a' 및 'b'가 비어 있지 않은 경우 문자열 'a'에서 첫 번째 문자를 제거하고 이를 문자열 'merge'로 복사한 다음 문자열 'b에서 첫 번째 문자(있는 경우)를 제거합니다. '를 입력하고 'merge' 문자열에 복사합니다.
  • 사전순으로 두 문자열에서 문자를 제거합니다. 즉, 문자열 'a'가 문자열 'b'보다 크면 문자열 'a'에서 문자를 제거한 다음 문자열 'b'에서 제거합니다.
  • '병합' 문자열을 반환합니다.

예를 들어

입력-1:

a = “bacaa”

b = “abcaa”

출력:

babcacaaaa

설명:

주어진 문자열 'a'는 사전순으로 문자열 'b'보다 크므로 문자열 'a', 즉 "b"에서 첫 번째 문자를 추출한 다음 문자열 'b'에서 추출합니다. 추출 후 문자열은 "babcacaaaa"가 됩니다.

이 문제를 해결하기 위한 접근 방식

이 문제를 해결하기 위한 재귀적 접근 방식은 문자열 'a'와 문자열 'b'의 각 문자를 추출하고 문자열 'a'의 문자가 사전순으로 다른 문자열보다 큰지 확인하고 마지막으로 문자열 'merge'에 연결하는 것입니다. .

여러 위치 뒤에 있는 각 문자의 하위 문자열을 찾고 사전순으로 다른 문자열보다 큰 경우 '병합'으로 연결합니다.

  • 두 개의 입력 문자열 'a'와 'b'를 사용합니다.
  • 재귀 문자열 함수 concatenateLargest(문자열 a, 문자열 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"가 됩니다.