Sudo Placement | Palindrome Family
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++
// CPP program to print the Palindrome Family // corresponding to a given string #include <bits/stdc++.h> using namespace std; // Checks if the given string is a Palindrome bool isPalindrome(string str) { // Find the reverse of the given string string reverse_str = str; reverse(reverse_str.begin(), reverse_str.end()); // Check if the reverse and the string are equal if (str == reverse_str) return true ; return false ; } // Prints the Palindrome Family corresponding to a given string void printPalindromeFamily(string str) { // Check if the given string is a palindrome if (isPalindrome(str)) { cout << "PARENT Palindrome" << endl; return ; } string oddString = "" ; string evenString = "" ; int n = str.length(); // append characters at odd indices(1 based) to oddString for ( int i = 0; i < n; i += 2) oddString += str[i]; // append characters at even indices(1 based indexing) to evenString for ( int i = 1; i < n; i += 2) evenString += str[i]; // Check if the individual evenString and oddString are palindrome bool isEvenPalindrome = isPalindrome(evenString); bool isOddPalindrome = isPalindrome(oddString); // Check if both oddString and evenString are palindromes // If so, it is a TWIN palindrome if (isEvenPalindrome && isOddPalindrome) cout << "TWIN Palindrome" << endl; // Else check if even indices form a palindrome else if (isEvenPalindrome) cout << "EVEN Palindrome" << endl; // Else check if odd indices form a palindrome else if (isOddPalindrome) cout << "ODD Palindrome" << endl; // If none of the cases satisfy, then it is an ALIEN Palindrome else cout << "Alien Palindrome" << endl; } // Driver Code int main() { string s = "geeksforskeeg" ; printPalindromeFamily(s); s = "aibohobia" ; printPalindromeFamily(s); s = "geeks" ; printPalindromeFamily(s); return 0; } |
Java
// Java program to print the Palindrome Family // corresponding to a given string import java.util.*; import java.io.*; public class PalindromeFamily { // Checks if the given string is a Palindrome public static boolean isPalindrome(String str){ //Set two pointers, one at the last character of the string and // other the first character. If both of them don't match, then // it is not a palindrome. Keep incrementing start pointer, // and decreasing end pointer by one, until they check the middle character. int start = 0 , end = str.length() - 1 ; while (start <= end){ if (str.charAt(start) != str.charAt(end)){ return false ; } start++; end--; } return true ; } // Prints the Palindrome Family corresponding to a given string public static void palindromeFamily(String str){ //Check for parent palindrome if (isPalindrome(str)){ System.out.println( "PARENT Palindrome" ); return ; } //Check for odd and even palindromes String oddString = "" ; String evenString = "" ; // append characters at odd indices(1 based) to oddString for ( int i= 0 ; i<str.length(); i+= 2 ){ oddString += str.charAt(i); } // append characters at even indices(1 based indexing) to evenString for ( int i= 1 ; i<str.length(); i+= 2 ){ evenString += str.charAt(i); } // Check if the individual evenString and oddString are palindrome boolean isEvenPalindrome = isPalindrome(evenString); boolean isOddPalindrome = isPalindrome(oddString); //Check if both oddString and evenString are palindromes //If yes, then it is a twin palindrome if (isOddPalindrome && isEvenPalindrome){ System.out.println( "TWIN Palindrome" ); } //Else, check if odd indices form a palindrome else if (isOddPalindrome){ System.out.println( "ODD Palindrome" ); } //Else, check if even indices form a palindrome else if (isEvenPalindrome){ System.out.println( "EVEN Palindrome" ); } //If none of the cases satisfy, then it is an ALIEN 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
# Python3 Program to print the Palindrome Family # corresponding to a given string # check if the given string is a Palindrome def isPalindrome(str1): # Find the reverse of the given string reverse_str = str1[:: - 1 ] # Check if the reverse and the string are equal if (str1 = = reverse_str): return True return False # Prints the palindrome family corresponding to a given string def printPalindromeFamily(str1): # Check if the given string is a palindrome if (isPalindrome(str1)): print ( "PARENT Palindrome" ) return False oddString = "" evenString = "" n = len (str1) # append characters at odd # indices(1 based) to oddString for i in range ( 0 , n, 2 ): oddString + = str1[i] # append characters at even # indices(1 based) to evenString for i in range ( 1 , n, 2 ): evenString + = str1[i] # check if the individual evenString and # OddString are palindromes isEvenPalindrome = isPalindrome(evenString) isOddPalindrome = isPalindrome(oddString) # Check if both oddString and evenString are palindromes # If so, it is a twin palindrome if (isEvenPalindrome and isOddPalindrome): print ( "TWIN Palindrome" ) elif (isEvenPalindrome): print ( "EVEN Palindrome" ) elif (isOddPalindrome): print ( "ODD Palindrome" ) else : print ( "Alien Palindrome" ) # Driver code s = "geeksforskeeg" printPalindromeFamily(s) s = "aibohobia" printPalindromeFamily(s) s = "geeks" printPalindromeFamily(s) # This code is contributed by simranjenny84 |
C#
// C# program to print the Palindrome Family // corresponding to a given string using System; class PalindromeFamily { // Checks if the given string is a Palindrome static bool isPalindrome( string str) { // Set two pointers, one at the last character of // the string and // other the first character. If both of them don't // match, then it is not a palindrome. Keep // incrementing start pointer, and decreasing end // pointer by one, until they check the middle // character. int start = 0, end = str.Length - 1; while (start <= end) { if (str[start] != str[end]) { return false ; } start++; end--; } return true ; } // Prints the Palindrome Family corresponding to a given // string static void palindromeFamily( string str) { // Check for parent palindrome if (isPalindrome(str)) { Console.WriteLine( "PARENT Palindrome" ); return ; } // Check for odd and even palindromes string oddString = "" ; string evenString = "" ; // append characters at odd indices(1 based) to // oddString for ( int i = 0; i < str.Length; i += 2) { oddString += str[i]; } // append characters at even indices(1 based // indexing) to evenString for ( int i = 1; i < str.Length; i += 2) { evenString += str[i]; } // Check if the individual evenString and oddString // are palindrome bool isEvenPalindrome = isPalindrome(evenString); bool isOddPalindrome = isPalindrome(oddString); // Check if both oddString and evenString are // palindromes If yes, then it is a twin palindrome if (isOddPalindrome && isEvenPalindrome) { Console.WriteLine( "TWIN Palindrome" ); } // Else, check if odd indices form a palindrome else if (isOddPalindrome) { Console.WriteLine( "ODD Palindrome" ); } // Else, check if even indices form a palindrome else if (isEvenPalindrome) { Console.WriteLine( "EVEN Palindrome" ); } // If none of the cases satisfy, then it is an ALIEN // palindrome else { Console.WriteLine( "ALIEN Palindrome" ); } } public static void Main() { string s = "geeksforskeeg" ; palindromeFamily(s); s = "aibohobia" ; palindromeFamily(s); s = "geeks" ; palindromeFamily(s); } } // This code is contributed by Samim Hossain Mondal. |
Javascript
// Javascript program to print the Palindrome Family // corresponding to a given string // Checks if the given string is a Palindrome function isPalindrome(str) { // Find the reverse of the given string let reverse_str = str.split( '' ).reverse().join( '' ); // Check if the reverse and the string are equal if (str == reverse_str) return true ; return false ; } // Prints the Palindrome Family corresponding to a given string function printPalindromeFamily(str) { // Check if the given string is a palindrome if (isPalindrome(str)) { console.log( "PARENT Palindrome" ); return ; } let oddString = "" ; let evenString = "" ; let n = str.length; // append characters at odd indices(1 based) to oddString for (let i = 0; i < n; i += 2) oddString += str[i]; // append characters at even indices(1 based indexing) to evenString for (let i = 1; i < n; i += 2) evenString += str[i]; // Check if the individual evenString and oddString are palindrome let isEvenPalindrome = isPalindrome(evenString); let isOddPalindrome = isPalindrome(oddString); // Check if both oddString and evenString are palindromes // If so, it is a TWIN palindrome if (isEvenPalindrome && isOddPalindrome) console.log( "TWIN Palindrome" ); // Else check if even indices form a palindrome else if (isEvenPalindrome) console.log( "EVEN Palindrome" ); // Else check if odd indices form a palindrome else if (isOddPalindrome) console.log( "ODD Palindrome" ); // If none of the cases satisfy, then it is an ALIEN Palindrome else console.log( "Alien Palindrome" ); } // Driver Code let s = "geeksforskeeg" ; printPalindromeFamily(s); s = "aibohobia" ; printPalindromeFamily(s); s = "geeks" ; printPalindromeFamily(s); // This code is contributed by Samim Hossain Mondal. |
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.
Please Login to comment...