# 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'.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• First, check all the prefix substrings of length > 1 to find if there’s 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 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



Output:

YES

Complexity: O(n^2)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.