GeeksforGeeks App
Open App
Browser
Continue

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

My Personal Notes arrow_drop_up