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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
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;
}

chevron_right


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

PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach
  
// Function to check whether
// the string is a palindrome
function isPalindrome($r)
{
    $p = $r;
  
    // reverse the string to
    // compare with the 
    // original string
    strrev($p);
  
    // 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.
function CheckStr($s)
{
    $l = strlen($s);
  
    // check all prefix substrings
    for ($i = 2; $i <= $l; $i++) 
    {
  
        // check if the prefix substring
        // is a palindrome
        if (isPalindrome(substr($s, 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(substr($s, $l
                                $i, $i)))
            return true;
    }
  
    // If we did not find a suffix
    return false; 
}
  
// Driver code
$s = "abccbarfgdbd";
if (CheckStr($s))
    echo ("YES\n");
else
    echo ("NO\n");
  
// This code is contributed 
// by Shivi_Aggarwal 
?>

chevron_right


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.