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

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.