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)