Related Articles

# Check if suffix and prefix of a string are palindromes

• Last Updated : 26 May, 2021

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’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

 ``

## Javascript

 ``
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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up