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

주어진 문자열 A가 C++에서 B의 하위 시퀀스가 ​​되도록 회문 문자열 B를 찾습니다.

<시간/>

문자열 A가 있다고 가정하고 회문이 될 다른 문자열 B를 찾아야 합니다. 그리고 주어진 문자열 A는 B의 부분수열이 될 것입니다. 문자열의 부분수열은 나머지 문자의 순서를 바꾸지 않고 일부 문자를 삭제하여 구성할 수 있는 문자열입니다. 문자열이 "cotst"라고 가정하면 생성된 문자열은 "contest"가 됩니다. 이 프로그램의 입력을 위해 우리는 A ="ab"를 선택했으며 생성된 문자열은 "abba"가 되며 이것은 회문입니다.

이를 해결하기 위해 우리는 이 접근 방식을 따를 것입니다. 이것은 매우 간단합니다. A를 반대로 한 다음 A 뒤에 반전된 부분을 추가하고 B를 형성합니다. 따라서 B =A + reverse(A)

#include<iostream>
#include<algorithm>
using namespace std;
bool isPalindrome(string str) {
   string temp = str;
   reverse(str.begin(), str.end());
   return str == temp;
}
string formPalindromeStr(string A) {
   string B = A;
   reverse(A.begin(), A.end());
   A = A + B;
   if (isPalindrome(B))
      return B;
      return A;
}
string reverse(string input) {
   string temp = input;
   int left, right = 0;
   right = temp.length() - 1;
   for (left = 0; left < right; left++, right--)
   swap(temp[left], temp[right]);
   return temp;
}
int main(int argc, char const *argv[]) {
   string A = "Hello";
   cout << "The B is: " << formPalindromeStr(A);
}

출력

The B is: olleHHello