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