Sudo Placement | Palindrome Family
Last Updated :
07 Dec, 2022
Given a string of lowercase characters, the task is to detect the family of string, where family of string is described as follows.
- ODD Palindrome : String with characters at odd index (1-based indexing) forming Palindrome.
- EVEN Palindrome : String with characters at even index (1-based indexing) forming Palindrome.
- TWIN Palindrome : String with both of the above properties.
- PARENT Palindrome : If the string is itself a Palindrome.
Examples:
Input : geeksforskeeg
Output : ODD Palindrome
Explanation: The string with characters at odd indices(following 1-based indexing) is ‘gesoseg‘, which is a palindrome, while the string formed by characters at even indices does not form a palindrome. Thus the given string is of ‘ODD‘ Family.
Input : aibohobia
Output : PARENT Palindrome
Explanation: The string itself is a palindrome, thus falls under PARENT Family.
Approach: Define 2 empty strings, oddString and evenString.
- Append all the characters at even indices in the evenString.
- Append all the characters at odd indices in the oddString.
Now, check for the following cases:
- Check if the given string is a Palindrome, if it is Print ‘PARENT Palindrome’.
- If the first case is not true, check if both evenString and oddString are palindromes, if so then print ‘TWIN Palindrome’
- If the second case doesn’t hold true, then if evenString is a Palindrome, print ‘EVEN Palindrome’, else if oddString is a Palindrome print ‘ODD Palindrome’.
- If none of the above conditions satisfy, print ‘ALIEN Palindrome’.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPalindrome(string str)
{
string reverse_str = str;
reverse(reverse_str.begin(), reverse_str.end());
if (str == reverse_str)
return true ;
return false ;
}
void printPalindromeFamily(string str)
{
if (isPalindrome(str)) {
cout << "PARENT Palindrome" << endl;
return ;
}
string oddString = "" ;
string evenString = "" ;
int n = str.length();
for ( int i = 0; i < n; i += 2)
oddString += str[i];
for ( int i = 1; i < n; i += 2)
evenString += str[i];
bool isEvenPalindrome = isPalindrome(evenString);
bool isOddPalindrome = isPalindrome(oddString);
if (isEvenPalindrome && isOddPalindrome)
cout << "TWIN Palindrome" << endl;
else if (isEvenPalindrome)
cout << "EVEN Palindrome" << endl;
else if (isOddPalindrome)
cout << "ODD Palindrome" << endl;
else
cout << "Alien Palindrome" << endl;
}
int main()
{
string s = "geeksforskeeg" ;
printPalindromeFamily(s);
s = "aibohobia" ;
printPalindromeFamily(s);
s = "geeks" ;
printPalindromeFamily(s);
return 0;
}
|
Java
import java.util.*;
import java.io.*;
public class PalindromeFamily {
public static boolean isPalindrome(String str){
int start = 0 , end = str.length() - 1 ;
while (start <= end){
if (str.charAt(start) != str.charAt(end)){
return false ;
}
start++;
end--;
}
return true ;
}
public static void palindromeFamily(String str){
if (isPalindrome(str)){
System.out.println( "PARENT Palindrome" );
return ;
}
String oddString = "" ;
String evenString = "" ;
for ( int i= 0 ; i<str.length(); i+= 2 ){
oddString += str.charAt(i);
}
for ( int i= 1 ; i<str.length(); i+= 2 ){
evenString += str.charAt(i);
}
boolean isEvenPalindrome = isPalindrome(evenString);
boolean isOddPalindrome = isPalindrome(oddString);
if (isOddPalindrome && isEvenPalindrome){
System.out.println( "TWIN Palindrome" );
}
else if (isOddPalindrome){
System.out.println( "ODD Palindrome" );
}
else if (isEvenPalindrome){
System.out.println( "EVEN Palindrome" );
}
else
System.out.println( "ALIEN Palindrome" );
}
public static void main(String[] args){
String s = "geeksforskeeg" ;
palindromeFamily(s);
s = "aibohobia" ;
palindromeFamily(s);
s = "geeks" ;
palindromeFamily(s);
}
}
|
Python3
def isPalindrome(str1):
reverse_str = str1[:: - 1 ]
if (str1 = = reverse_str):
return True
return False
def printPalindromeFamily(str1):
if (isPalindrome(str1)):
print ( "PARENT Palindrome" )
return False
oddString = ""
evenString = ""
n = len (str1)
for i in range ( 0 , n, 2 ):
oddString + = str1[i]
for i in range ( 1 , n, 2 ):
evenString + = str1[i]
isEvenPalindrome = isPalindrome(evenString)
isOddPalindrome = isPalindrome(oddString)
if (isEvenPalindrome and isOddPalindrome):
print ( "TWIN Palindrome" )
elif (isEvenPalindrome):
print ( "EVEN Palindrome" )
elif (isOddPalindrome):
print ( "ODD Palindrome" )
else :
print ( "Alien Palindrome" )
s = "geeksforskeeg"
printPalindromeFamily(s)
s = "aibohobia"
printPalindromeFamily(s)
s = "geeks"
printPalindromeFamily(s)
|
C#
using System;
class PalindromeFamily {
static bool isPalindrome( string str)
{
int start = 0, end = str.Length - 1;
while (start <= end) {
if (str[start] != str[end]) {
return false ;
}
start++;
end--;
}
return true ;
}
static void palindromeFamily( string str)
{
if (isPalindrome(str)) {
Console.WriteLine( "PARENT Palindrome" );
return ;
}
string oddString = "" ;
string evenString = "" ;
for ( int i = 0; i < str.Length; i += 2) {
oddString += str[i];
}
for ( int i = 1; i < str.Length; i += 2) {
evenString += str[i];
}
bool isEvenPalindrome = isPalindrome(evenString);
bool isOddPalindrome = isPalindrome(oddString);
if (isOddPalindrome && isEvenPalindrome) {
Console.WriteLine( "TWIN Palindrome" );
}
else if (isOddPalindrome) {
Console.WriteLine( "ODD Palindrome" );
}
else if (isEvenPalindrome) {
Console.WriteLine( "EVEN Palindrome" );
}
else {
Console.WriteLine( "ALIEN Palindrome" );
}
}
public static void Main()
{
string s = "geeksforskeeg" ;
palindromeFamily(s);
s = "aibohobia" ;
palindromeFamily(s);
s = "geeks" ;
palindromeFamily(s);
}
}
|
Javascript
function isPalindrome(str)
{
let reverse_str = str.split( '' ).reverse().join( '' );
if (str == reverse_str)
return true ;
return false ;
}
function printPalindromeFamily(str)
{
if (isPalindrome(str)) {
console.log( "PARENT Palindrome" );
return ;
}
let oddString = "" ;
let evenString = "" ;
let n = str.length;
for (let i = 0; i < n; i += 2)
oddString += str[i];
for (let i = 1; i < n; i += 2)
evenString += str[i];
let isEvenPalindrome = isPalindrome(evenString);
let isOddPalindrome = isPalindrome(oddString);
if (isEvenPalindrome && isOddPalindrome)
console.log( "TWIN Palindrome" );
else if (isEvenPalindrome)
console.log( "EVEN Palindrome" );
else if (isOddPalindrome)
console.log( "ODD Palindrome" );
else
console.log( "Alien Palindrome" );
}
let s = "geeksforskeeg" ;
printPalindromeFamily(s);
s = "aibohobia" ;
printPalindromeFamily(s);
s = "geeks" ;
printPalindromeFamily(s);
|
Output
ODD Palindrome
PARENT Palindrome
Alien Palindrome
Time Complexity: O(n), where n is the length of the given string.
Auxiliary Space: O(n), where n is the length of the given string.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...