Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าสตริงที่กำหนดเป็นการหมุนของ palindrome ใน C++ . หรือไม่


ที่นี่เราจะเห็นหนึ่งสตริงคือ 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