Given a string str, the task is to check whether the given string can be split into two halves, each of which is palindromic. If it is possible, print Yes. Otherwise, print No.
Examples:
Input: str = “naan”
Output: No
Explanation:
Since both halves “na” and “an” are not palindrome.
Input: momdad
Output: Yes
Explanation:
Since both half “mom” and “dad” are palindromes.
Approach:
Follow the steps below to solve the problem:
- Iterate over the first ((N / 2) / 2 – 1) indices of the string.
- Simultaneously check if both the halves are palindrome or not by the following two conditions:
- If S[i] is not equal to S[N/2 – 1 – i], then first half is not palindromic.
- If S[N/2 + i] is not equal to S[N – 1 – i], then second half is not palindromic.
- If none of the above condition is satisfied even once during the iteration, then both halves are palindromic. Print Yes.
- Otherwise, print No.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void checkPalindrome(string S)
{
int N = S.size();
bool first_half = true ;
bool second_half = true ;
int cnt = (N / 2) - 1;
for ( int i = 0; i < ((N / 2) / 2); i++) {
if (S[i] != S[cnt]) {
first_half = false ;
break ;
}
if (S[N / 2 + i] != S[N / 2 + cnt]) {
second_half = false ;
break ;
}
cnt--;
}
if (first_half && second_half) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
}
int main()
{
string S = "momdad" ;
checkPalindrome(S);
return 0;
}
|
Java
public class Main {
public static void checkPalindrome(
String S)
{
int N = S.length();
boolean first_half = true ;
boolean second_half = true ;
int cnt = (N / 2 ) - 1 ;
for ( int i = 0 ; i < (N / 2 ); i++) {
if (S.charAt(i) != S.charAt(cnt)) {
first_half = false ;
break ;
}
if (S.charAt(N / 2 + i)
!= S.charAt(N / 2 + cnt)) {
second_half = false ;
break ;
}
cnt--;
}
if (first_half && second_half) {
System.out.println( "Yes" );
}
else {
System.out.println( "No" );
}
}
public static void main(String[] args)
{
String S = "momdad" ;
checkPalindrome(S);
}
}
|
Python3
def checkPalindrome(S):
n = len (S)
first_half = True
second_half = True
cnt = (n / / 2 ) - 1
for i in range ( 0 , int ((n / 2 ) / 2 )):
if (S[i] ! = S[cnt]):
first_half = False
break
if (S[n / / 2 + i] ! = S[n / / 2 + cnt]):
second_half = False
break
cnt - = 1
if (first_half and second_half):
print ( 'Yes' , end = '')
else :
print ( 'No' , end = '')
if __name__ = = '__main__' :
S = 'momdad'
checkPalindrome(S)
|
C#
using System;
class GFG{
public static void checkPalindrome(String S)
{
int N = S.Length;
bool first_half = true ;
bool second_half = true ;
int cnt = (N / 2) - 1;
for ( int i = 0; i < (N / 2); i++)
{
if (S[i] != S[cnt])
{
first_half = false ;
break ;
}
if (S[N / 2 + i] != S[N / 2 + cnt])
{
second_half = false ;
break ;
}
cnt--;
}
if (first_half && second_half)
{
Console.Write( "Yes" );
}
else
{
Console.Write( "No" );
}
}
public static void Main()
{
String S = "momdad" ;
checkPalindrome(S);
}
}
|
Javascript
<script>
function checkPalindrome( S) {
var N = S.length;
var first_half = true ;
var second_half = true ;
var cnt = parseInt((N / 2)) - 1;
for (i = 0; i < (N / 2); i++) {
if (S.charAt(i) != S.charAt(cnt)) {
first_half = false ;
break ;
}
if (S.charAt(N / 2 + i) != S.charAt(N / 2 + cnt)) {
second_half = false ;
break ;
}
cnt--;
}
if (first_half && second_half) {
document.write( "Yes" );
} else {
document.write( "No" );
}
}
var S = "momdad" ;
checkPalindrome(S);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
20 Jun, 2023
Like Article
Save Article