문자열 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