# 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 ``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

 ``

## Javascript

 ``

Output
`YES`

Time Complexity: O(n^2), where n is the length of the given string.
Auxiliary Space: O(n)

Previous
Next