Check if suffix and prefix of a string are palindromes
Given a string ‘s’, the task is to check whether the string has both prefix and suffix substrings of length greater than 1 which are palindromes.
Print ‘YES’ if the above condition is satisfied or ‘NO’ otherwise.
Examples:
Input : s = abartbb Output : YES Explanation : The string has prefix substring 'aba' and suffix substring 'bb' which are both palindromes, so the output is 'YES'. Input : s = abcc Output : NO Explanation : The string has no prefix substring which is palindrome, it only has a suffix substring 'cc' which is a palindrome. So the output is 'NO'.
Approach:
- First, check all the prefix substrings of length > 1 to find if there are any which is a palindrome.
- Check all the suffix substrings as well.
- If both the conditions are true, then the output is ‘YES’.
- Otherwise, the output is ‘NO’.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to check whether // the string is a palindrome bool isPalindrome(string r) { string p = r; // reverse the string to // compare with the // original string reverse(p.begin(), p.end()); // check if both are same return (r == p); } // Function to check whether the string // has prefix and suffix substrings // of length greater than 1 // which are palindromes. bool CheckStr(string s) { int l = s.length(); // check all prefix substrings int i; for (i = 2; i <= l; i++) { // check if the prefix substring // is a palindrome if (isPalindrome(s.substr(0, i))) break ; } // If we did not find any palindrome prefix // of length greater than 1. if (i == (l+1)) return false ; // check all suffix substrings, // as the string is reversed now i = 2; for (i = 2; i <= l; i++) { // check if the suffix substring // is a palindrome if (isPalindrome(s.substr(l-i, i))) return true ; } // If we did not find a suffix return false ; } // Driver code int main() { string s = "abccbarfgdbd" ; if (CheckStr(s)) cout << "YES\n" ; else cout << "NO\n" ; return 0; } |
Java
// Java implementation of the approach import java.util.*; class GFG { static String reverse(String input) { char [] a = input.toCharArray(); int l, r = 0 ; r = a.length - 1 ; for (l = 0 ; l < r; l++, r--) { // Swap values of l and r char temp = a[l]; a[l] = a[r]; a[r] = temp; } return String.valueOf(a); } // Function to check whether // the string is a palindrome static boolean isPalindrome(String r) { String p = r; // reverse the string to // compare with the // original string p = reverse(p); // check if both are same return (r.equals(p)); } // Function to check whether the string // has prefix and suffix substrings // of length greater than 1 // which are palindromes. static boolean CheckStr(String s) { int l = s.length(); // check all prefix substrings int i; for (i = 2 ; i <= l; i++) { // check if the prefix substring // is a palindrome if (isPalindrome(s.substring( 0 , i))) { break ; } } // If we did not find any palindrome prefix // of length greater than 1. if (i == (l + 1 )) { return false ; } // check all suffix substrings, // as the string is reversed now i = 2 ; for (i = 2 ; i <=l; i++) { // check if the suffix substring // is a palindrome if (isPalindrome(s.substring(l-i,l))) { return true ; } } // If we did not find a suffix return false ; } // Driver code public static void main(String args[]) { String s = "abccbarfgdbd" ; if (CheckStr(s)) { System.out.println( "Yes" ); } else { System.out.println( "No" ); } } } // This code is contributed by Rajput-Ji |
Python3
# Python3 implementation of the approach # Function to check whether # the string is a palindrome def isPalindrome(r): # Reverse the string and assign # it to new variable for comparison p = r[:: - 1 ] # check if both are same return r = = p # Function to check whether the string # has prefix and suffix substrings # of length greater than 1 # which are palindromes. def CheckStr(s): l = len (s) # check all prefix substrings i = 0 for i in range ( 2 , l + 1 ): # check if the prefix substring # is a palindrome if isPalindrome(s[ 0 :i]) = = True : break # If we did not find any palindrome # prefix of length greater than 1. if i = = (l + 1 ): return False # check all suffix substrings, # as the string is reversed now for i in range ( 2 , l + 1 ): # check if the suffix substring # is a palindrome if isPalindrome(s[l - i : l]) = = True : return True # If we did not find a suffix return False # Driver code if __name__ = = "__main__" : s = "abccbarfgdbd" if CheckStr(s) = = True : print ( "YES" ) else : print ( "NO" ) # This code is contributed by Rituraj Jain |
C#
// C# implementation of the approach using System; class GFG { static String reverse(String input) { char [] a = input.ToCharArray(); int l, r = 0; r = a.Length - 1; for (l = 0; l < r; l++, r--) { // Swap values of l and r char temp = a[l]; a[l] = a[r]; a[r] = temp; } return String.Join( "" ,a); } // Function to check whether // the string is a palindrome static Boolean isPalindrome(String r) { String p = r; // reverse the string to // compare with the // original string p = reverse(p); // check if both are same return (r.Equals(p)); } // Function to check whether the string // has prefix and suffix substrings // of length greater than 1 // which are palindromes. static Boolean CheckStr(String s) { int l = s.Length; // check all prefix substrings int i; for (i = 2; i <= l; i++) { // check if the prefix substring // is a palindrome if (isPalindrome(s.Substring(0, i))) { break ; } } // If we did not find any palindrome prefix // of length greater than 1. if (i == (l + 1)) { return false ; } // check all suffix substrings, // as the string is reversed now i = 2; for (i = 2; i <=l; i++) { // check if the suffix substring // is a palindrome if (isPalindrome(s.Substring(l-i,i))) { return true ; } } // If we did not find a suffix return false ; } // Driver code public static void Main(String []args) { String s = "abccbarfgdbd" ; if (CheckStr(s)) { Console.WriteLine( "Yes" ); } else { Console.WriteLine( "No" ); } } } // This code is contributed by 29AjayKumar |
PHP
<?php // PHP implementation of the approach // Function to check whether // the string is a palindrome function isPalindrome( $r ) { $p = $r ; // reverse the string to // compare with the // original string strrev ( $p ); // check if both are same return ( $r == $p ); } // Function to check whether the // string has prefix and suffix // substrings of length greater // than 1 which are palindromes. function CheckStr( $s ) { $l = strlen ( $s ); // check all prefix substrings for ( $i = 2; $i <= $l ; $i ++) { // check if the prefix substring // is a palindrome if (isPalindrome( substr ( $s , 0, $i ))) break ; } // If we did not find any palindrome // prefix of length greater than 1. if ( $i == ( $l + 1)) return false; // check all suffix substrings, // as the string is reversed now $i = 2; for ( $i = 2; $i <= $l ; $i ++) { // check if the suffix substring // is a palindrome if (isPalindrome( substr ( $s , $l - $i , $i ))) return true; } // If we did not find a suffix return false; } // Driver code $s = "abccbarfgdbd" ; if (CheckStr( $s )) echo ( "YES\n" ); else echo ( "NO\n" ); // This code is contributed // by Shivi_Aggarwal ?> |
Javascript
<script> // JavaScript implementation of the approach // Function to check whether // the string is a palindrome function isPalindrome(r) { var p = r; // reverse the string to // compare with the // original string p.split( '' ).reverse().join( '' ); // check if both are same return (r == p); } // Function to check whether the string // has prefix and suffix substrings // of length greater than 1 // which are palindromes. function CheckStr( s) { var l = s.length; // check all prefix substrings var i; for (i = 2; i <= l; i++) { // check if the prefix substring // is a palindrome if (isPalindrome(s.substring(0, i))) break ; } // If we did not find any palindrome prefix // of length greater than 1. if (i == (l+1)) return false ; // check all suffix substrings, // as the string is reversed now i = 2; for (i = 2; i <= l; i++) { // check if the suffix substring // is a palindrome if (isPalindrome(s.substring(l-i, l))) return true ; } // If we did not find a suffix return false ; } // Driver code var s = "abccbarfgdbd" ; if (CheckStr(s)) document.write( "YES" ); else document.write( "NO" ); </script> |
Output
YES
Time Complexity: O(n^2), where n is the length of the given string.
Auxiliary Space: O(n)
Please Login to comment...