Open in App
Not now

# Check if suffix and prefix of a string are palindromes

• Last Updated : 05 Dec, 2022

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
Related Articles