Check if a string can be split into even length palindromic substrings

Given a string str, the task is to check if it is possible to split the given string into even length palindromic substrings
Examples: 
 

Input: str = “abbacc” 
Output: Yes 
Explantion: 
Strings “abba” and “cc” are the even length palindromic substrings.
Input: str = “abcde” 
Output: No 
Explantion: 
No even length palindromic substrings possible. 
 

 

Approach: The idea is to use Stack Data Structure. Below are the steps: 
 

  1. Initialise a empty stack.
  2. Traverse the given string str.
  3. For each characters in the given string, do the following: 
    • If the charactor is equal to the charactor at the top of the stack then pop the top element from the stack.
    • Else push the current charactor into the stack.
  4. If stack is empty after the above steps then the given string can be break into palindromic substring of even length.
  5. Else the given string cannot be break into palindromic substring of even length.

Below is the implementation of the above approach:
 



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to check string str can be
// split a string into even length
// palindromic substrings
bool check(string s, int n)
{
  
    // Initialize a stack
    stack<char> st;
  
    // Iterate the string
    for (int i = 0; i < n; i++) {
  
        // If the i-th character is same
        // as that at the top of the stack
        // then pop the top element
        if (!st.empty() && st.top() == s[i])
            st.pop();
  
        // Else push the current charactor
        // into the stack
        else
            st.push(s[i]);
    }
  
    // If the stack is empty, then even
    // palindromic substrings are possible
    if (st.empty()) {
        return true;
    }
  
    // Else not-possible
    else {
        return false;
    }
}
  
// Driver Code
int main()
{
    // Given string
    string str = "aanncddc";
  
    int n = str.length();
  
    // Function Call
    if (check(str, n)) {
        cout << "Yes" << endl;
    }
    else {
        cout << "No" << endl;
    }
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program for the above approach
import java.util.*;
  
class GFG{
  
// Function to check String str can be
// split a String into even length
// palindromic subStrings
static boolean check(String s, int n)
{
      
    // Initialize a stack
    Stack<Character> st = new Stack<Character>();
  
    // Iterate the String
    for(int i = 0; i < n; i++)
    {
          
       // If the i-th character is same
       // as that at the top of the stack
       // then pop the top element
       if (!st.isEmpty() &&
               st.peek() == s.charAt(i))
           st.pop();
             
       // Else push the current charactor
       // into the stack
       else
           st.add(s.charAt(i));
    }
      
    // If the stack is empty, then even
    // palindromic subStrings are possible
    if (st.isEmpty())
    {
        return true;
    }
      
    // Else not-possible
    else
    {
        return false;
    }
}
  
// Driver Code
public static void main(String[] args)
{
      
    // Given String
    String str = "aanncddc";
  
    int n = str.length();
  
    // Function Call
    if (check(str, n))
    {
        System.out.print("Yes" + "\n");
    }
    else
    {
        System.out.print("No" + "\n");
    }
}
}
  
// This code is contributed by sapnasingh4991

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program for the above approach 
  
# Function to check string str can be 
# split a string into even length 
# palindromic substrings 
def check(s, n):
  
    st = []
  
    # Iterate the string 
    for i in range(n):
  
        # If the i-th character is same 
        # as that at the top of the stack 
        # then pop the top element 
        if (len(st) != 0 and 
         st[len(st) - 1] == s[i]):
            st.pop(); 
  
        # Else push the current charactor 
        # into the stack 
        else:
            st.append(s[i]); 
      
    # If the stack is empty, then even 
    # palindromic substrings are possible 
    if (len(st) == 0):
        return True
      
    # Else not-possible 
    else:
        return False
      
# Driver Code 
  
# Given string 
str = "aanncddc"
n = len(str)
  
# Function Call 
if (check(str, n)):
    print("Yes")
else
    print("No")
  
# This code is contributed by grand_master    

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program for the above approach
using System;
using System.Collections.Generic;
  
class GFG{
  
// Function to check String str can be
// split a String into even length
// palindromic subStrings
static bool check(String s, int n)
{
      
    // Initialize a stack
    Stack<int> st = new Stack<int>();
  
    // Iterate the String
    for(int i = 0; i < n; i++)
    {
          
        // If the i-th character is same
        // as that at the top of the stack
        // then pop the top element
        if (st.Count != 0 &&
            st.Peek() == s[i])
            st.Pop();
                  
        // Else push the current charactor
        // into the stack
        else
            st.Push(s[i]);
    }
      
    // If the stack is empty, then even
    // palindromic subStrings are possible
    if (st.Count == 0)
    {
        return true;
    }
      
    // Else not-possible
    else
    {
        return false;
    }
}
  
// Driver Code
public static void Main(String[] args)
{
      
    // Given String
    String str = "aanncddc";
  
    int n = str.Length;
  
    // Function call
    if (check(str, n))
    {
        Console.Write("Yes" + "\n");
    }
    else
    {
        Console.Write("No" + "\n");
    }
}
}
  
// This code is contributed by sapnasingh4991

chevron_right


Output: 

Yes

 

Time Complexity: O(N), where N is the length of the given string.
 

competitive-programming-img




My Personal Notes arrow_drop_up

Recommended Posts:


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.