Related Articles
Check if a string can be split into even length palindromic substrings
• Difficulty Level : Easy
• Last Updated : 28 Jul, 2020

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

 `// C++ program for the above approach``#include ``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;``}`

Java

 `// 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 st = ``new` `Stack();`` ` `    ``// 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`

Python3

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

C#

 `// 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`
Output:
```Yes
```

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

My Personal Notes arrow_drop_up