Skip to content
Related Articles

Related Articles

Check if suffix and prefix of a string are palindromes

Improve Article
Save Article
  • Last Updated : 05 Dec, 2022
Improve Article
Save Article

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 <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;
}

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




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

Javascript




<script>
 
// JavaScript implementation of the approach
 
// Function to check whether
// the string is a palindrome
function isPalindrome(r)
{
    var p = r;
 
    // reverse the string to
    // compare with the
    // original string
    p.split('').reverse().join('');
 
    // 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)
{
    var l = s.length;
 
    // check all prefix substrings
    var 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
var s = "abccbarfgdbd";
if (CheckStr(s))
    document.write( "YES");
else
    document.write( "NO");
 
</script>

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

Start Your Coding Journey Now!