Table of Contents
Given a string, write a function that will return TRUE if it is a rotation of any palindrom else return FALSE
Example 1
INPUT :
s = “cbbcd”
OUTPUT :
TRUE
In the above example, the given string “cbbcd” is a rotation of a palindrom “bcdcb”
Example 2
INPUT :
s = “aac”
OUTPUT :
TRUE
In the above example, the given string “aac” is a rotation of a palindrom “aca”
Time Complexity : O(n^2)
Space Complexity : O(n) for storing rotations
In this method the main idea is to rotate the string in every possible way, if any rotation is a palindrome then return TRUE
Algorithm
1. Check every rotation in the given string is a palindrome
Till the length of the given string
a. Divide the given string into two halves such that, s1 = s[0..i+1] and s2 = s[i+1….n-i+1]
b. Append s2 with s1
c. Check whether the appended string is a palindrome
Implementation of above algorithm for string “abcd”
s = “abcd”
First check whether the given string s is a palindrome or not, it is not
Divide the string
s1 = “a”, s2 = “bcd”
Append s2.s1 = “bcda” which is not a palindrome
Again, divide the string
s1 = “ab”, s2 = “cd”
Append s2.s1 = “cdab” which is not a palindrome
Again, divide the string
s1 = “abc”, s2 = “d”
Append s2.s1 = “dabc” which is not a palindrome
C++ Program
#include<iostream> #include<string> using namespace std; //Return True if the given string is a palindrome bool isPalindrome(string s) { // Start from leftmost and rightmost corners of s int l = 0; int h = s.length() - 1; // Keep comparing characters while they are same while (h > l) if (s[l++] != s[h--]) return false; // If all characters are matching return true; } // Returns TRUE if the given string is rotation of any palindrome bool isRotationOfPalindrome(string s) { // If string iteself is palindrome if (isPalindrome(s)) return true; //find every rotation int n = s.length(); for (int i = 0; i < n-1; i++) { string s2 = s.substr(i+1, n-i-1); string s1 = s.substr(0, i+1); // Check if this rotation is palindrome if (isPalindrome(s2.append(s1))) return true; } return false; } int main() { string s = "cbbcd"; if(isRotationOfPalindrome(s)) { cout<<"TRUE"<<endl; } else { cout<<"FALSE"<<endl; } return 0; }