Cho chuỗi A. Tìm chuỗi đối xứng B sao cho A là chuỗi con của B (xóa ký tự không đổi thứ tự). Cách đơn giản: B = A + reverse(A). Ví dụ A="ab" → B="abba". A="Hello" → B="olleHHello".
Xây dựng chuỗi đối xứng
Đảo ngược A, nối vào sau A. Kiểm tra nếu A đã đối xứng thì trả về A, ngược cả trả về A+reverse(A).
Ví dụ minh họa
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool isPalindrome(string s) {
string t = s;
reverse(t.begin(), t.end());
return s == t;
}
string makePalindrome(string A) {
string B = A;
reverse(A.begin(), A.end());
A = A + B;
return isPalindrome(B) ? B : A;
}
int main() {
string A = "Hello";
cout << "Chuoi B: " << makePalindrome(A);
return 0;
}
Kết quả
Chuoi B: olleHHello