สมมติว่าเรามีสตริง A เราต้องหาสตริง B อีกอันที่จะเป็นพาลินโดรม และสตริงที่กำหนด A จะเป็นชุดย่อยของ B ลำดับที่ตามมาของสตริงคือสตริงที่สามารถสร้างได้โดยการลบอักขระบางตัวโดยไม่เปลี่ยนลำดับของอักขระที่เหลือ สมมติว่าสตริงเป็น "cotst" จากนั้นสตริงที่สร้างจะเป็น "การแข่งขัน" สำหรับอินพุตของโปรแกรมนี้ เราเลือก A =“ab” สตริงที่สร้างจะเป็น “abba” นี่คือ palindrome
เพื่อแก้ปัญหานี้ เราจะปฏิบัติตามแนวทางนี้ ง่ายมาก เราจะย้อนกลับ A จากนั้นผนวกส่วนที่กลับด้านหลัง A และรูปแบบ B ดังนั้น B =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, 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