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


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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.