ที่นี่เราจะเห็นหนึ่งสตริงคือ palindrome หลังจากการหมุนบางรอบหรือไม่ palindrome เป็นสตริงที่เหมือนกันทั้งสองทิศทาง การหมุนสตริงเป็น palindrome หากเป็นเช่น AAAAD นี่ไม่ใช่พาลินโดรมโดยตรง แต่การหมุนของ AADAA นั้นเป็นพาลินโดรม
ในการตรวจสอบสตริงว่าหมุน palindrome หรือไม่จากนั้นเราจะตรวจสอบว่านี่คือ palindrome หรือไม่ในครั้งแรกหลังจากนั้นหมุนหนึ่งตัวอักษรแล้วตรวจสอบอีกครั้งการตรวจสอบนี้จะดำเนินการ n จำนวนครั้งโดยที่ n คือจำนวนตัวอักษร
ตัวอย่าง
#include <iostream> #include <string> #include <algorithm> using namespace std; bool isPalindromeRange(string str, int left, int right){ return (left >= right) || (str[left] == str[right] && isPalindromeRange(str, left + 1, right - 1)); } bool isRotatedPalindrome(string str){ int len = str.length(); for (int i = 0; i < len; i++){ rotate(str.begin(), str.begin() + 1, str.end()); if (isPalindromeRange(str, 0, len - 1)) //if rotated string is palindrome, then return true return true; } return false; } int main(){ string str = "AAAAD"; //AADAA is palindrome //rotate(str.begin(), str.begin() + 2, str.end()); if (isRotatedPalindrome(str)) cout << "Its rotation is palindrome"; else cout << "Its rotation is not palindrome"; }
ผลลัพธ์
Its rotation is palindrome