JavaScript Program to Check if a Given String is a Rotation of a Palindrome
Last Updated :
31 Oct, 2023
In this article, we will see how to check a given string is a rotation of a palindrome. A palindrome is a string that remains the same when its characters are reversed (e.g., “racecar” is a palindrome).
Example:
Input: str = "racecar"
Output: true
// "racecar" is a rotation of a palindrome "racecar"
Input: str = "abbab"
Output: true
// "abbab" is a rotation of "abbba".
Input: str = "baba"
Output: true
// "baba" is a rotation of a palindrome "baba".
Input: str = "abcd"
Output: false
// "abcd" is not a rotation of any palimdrome.
Method 1: Naive Approach
In this approach, we generate all possible rotations of the string and check if any of them is a palindrome. It does this by generating all possible rotations of the string and checking if any of these rotations are palindromes using the isPalindrome function. If it finds a palindrome rotation, it returns true; otherwise, it returns false.
Example: Below is the implementation of the above example.
Javascript
function isPalindrome(str) {
const len = str.length;
for (let i = 0; i < len / 2; i++) {
if (str[i] !== str[len - 1 - i]) {
return false ;
}
}
return true ;
}
function isRotationOfPalindrome(str) {
if (!str || str.length <= 1) {
return false ;
}
const len = str.length;
for (let i = 0; i < len; i++) {
const rotated =
str.slice(i) + str.slice(0, i);
if (isPalindrome(rotated)) {
return true ;
}
}
return false ;
}
const inputString = "abcd" ;
const isRotatedPalindrome =
isRotationOfPalindrome(inputString);
console.log(isRotatedPalindrome);
|
Time Complexity: O(N^2), where N is the length of the input string
Auxiliary Space: O(N)
Method 2: Efficient Approach:
In this approach, we will find a specific rotation that makes it easier to determine if the string is a rotation of a palindrome. The code checks if a given string is a rotation of a palindrome. It creates a doubled version of the input string to handle all possible rotations efficiently. Then, it iterates through the doubled string, extracting substrings of the same length as the original string and checking if any of these substrings are palindromes using the isPalindrome function. If it finds a palindrome rotation, it returns true, otherwise, it returns false.
Example: Below is the implementation of the above example.
Javascript
function isRotationOfPalindrome(str) {
if (!str || str.length <= 1) {
return false ;
}
const len = str.length;
const doubledStr = str + str;
for (let i = 0; i < len; i++) {
const possibleRotation =
doubledStr.slice(i, i + len);
if (isPalindrome(possibleRotation)) {
return true ;
}
}
return false ;
}
function isPalindrome(str) {
const len = str.length;
for (let i = 0; i < len / 2; i++) {
if (str[i] !== str[len - 1 - i]) {
return false ;
}
}
return true ;
}
const inputString = 'abba' ;
const isRotatedPalindrome =
isRotationOfPalindrome(inputString);
console.log(isRotatedPalindrome);
|
Time Complexity: O(N), where N is the length of the input string
Auxiliary Space: O(N)
Share your thoughts in the comments
Please Login to comment...