একটি স্ট্রিং A দেওয়া আছে। একটি প্যালিনড্রোম স্ট্রিং B বানাতে হবে যাতে A, B-এর সাবসিকোয়েন্স হয়। সাবসিকোয়েন্স মানে কিছু ক্যারেক্টর ডিলিট করে ক্রম বদলায় না তৈরি করা স্ট্রিং।
উদাহরণ: A = "ab" → B = "abba" (প্যালিনড্রোম এবং "ab" এর সাবসিকোয়েন্স)।
A কে রিভার্স করে A-এর পেছনে অ্যাপেন্ড করুন। B = A + reverse(A)। এটি সবসময় প্যালিনড্রোম হবে এবং 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 = 0, right = temp.length() - 1;
for (; left < right; left++, right--)
swap(temp[left], temp[right]);
return temp;
}
int main() {
string A = "Hello";
cout << "The B is: " << formPalindromeStr(A);
}
The B is: olleHHello