Related Articles

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

• Difficulty Level : Easy
• Last Updated : 22 Jul, 2021

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
Explanation:
Strings “abba” and “cc” are the even length palindromic substrings.
Input: str = “abcde”
Output: No
Explanation:
No even length palindromic substrings possible.

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

1. Initialise an empty stack.
2. Traverse the given string str.
3. For each character in the given string, do the following:
• If the character is equal to the character at the top of the stack then pop the top element from the stack.
• Else push the current character into the stack.
4. If stack is empty after the above steps then the given string can be break into a 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`

## Javascript

 ``
Output:
`Yes`

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

My Personal Notes arrow_drop_up