# Maximum even length sub-string that is permutation of a palindrome

Given a string , the task is to find the maximum length of the sub-string of that can be arranged into a Palindrome (i.e at least one of its permutation is a Palindrome). **Note** that the sub-string must be of even length.

**Examples:**

Input:str = “124565463”

Output:6

“456546” is the valid sub-string

Input:str = “122313”

Output:6

**Approach:** Use two variables: **start** (inclusive) and **end** (exclusive) to keep track of the starting and ending index of the current sub-string that is being considered in the given string. Also use a dictionary named **count** which keeps the record of how many times, a character occurs in the current sub-string. Now, there are two possible cases for a sub-string:

- If the length of the sub-string is odd, then it cannot be considered in the final solution.
- If the length of the sub-string is even, then it can be a possible solution only if each character in that sub-string occurs even number of times which can be done using the dictionary
**count**. We check if each character occurs even number of times or not. If yes, then we include it as one of the possible solutions. Then we form the next sub-string by including the next character in the string which can be done by simply incrementing**end**and check recursively if a sub-string with greater length can be formed which satisfies the given conditions and return the maximum of all possible solutions.

Below is the implementation of the above approach:

`# Python3 code to find the maximum length of sub-string ` `# (of even length) which can be arranged into a Palindrome ` ` ` `from` `collections ` `import` `defaultdict ` ` ` `# function that returns true if the given ` `# sub-string can be arranged into a Palindrome ` `def` `canBePalindrome(count): ` ` ` `for` `key ` `in` `count: ` ` ` `if` `count[key] ` `%` `2` `!` `=` `0` `: ` ` ` `return` `False` ` ` `return` `True` ` ` `# This function returns the maximum length of ` `# the sub-string (of even length) which can be ` `# arranged into a Palindrome ` `def` `maxPal(string, count, start, end): ` ` ` ` ` `# If we reach end of the string ` ` ` `if` `end ` `=` `=` `len` `(string): ` ` ` ` ` `# if string is of even length ` ` ` `if` `(end` `-` `start) ` `%` `2` `=` `=` `0` `: ` ` ` ` ` `# if string can be arranged into a ` ` ` `# palindrome ` ` ` `if` `canBePalindrome(count) ` `=` `=` `True` `: ` ` ` `return` `end` `-` `start ` ` ` ` ` `return` `0` ` ` ` ` `else` `: ` ` ` ` ` `# Even length sub-string ` ` ` `if` `(end` `-` `start) ` `%` `2` `=` `=` `0` `: ` ` ` ` ` `# Check if current sub-string can be ` ` ` `# arranged into a palindrome ` ` ` `if` `canBePalindrome(count) ` `=` `=` `True` `: ` ` ` `count[string[end]] ` `+` `=` `1` ` ` `return` `max` `(end` `-` `start, maxPal(string, count, start, end ` `+` `1` `)) ` ` ` ` ` `else` `: ` ` ` `count[string[end]] ` `+` `=` `1` ` ` `return` `maxPal(string, count, start, end ` `+` `1` `) ` ` ` ` ` `# Odd length sub-string ` ` ` `else` `: ` ` ` ` ` `count[string[end]] ` `+` `=` `1` ` ` `length ` `=` `maxPal(string, count.copy(), start, end ` `+` `1` `) ` ` ` ` ` `count[string[end]] ` `-` `=` `1` ` ` `count[string[start]] ` `-` `=` `1` ` ` `return` `max` `(length, maxPal(string, count, start ` `+` `1` `, end)) ` ` ` `# Driver code ` `string ` `=` `'124565463'` `start, end ` `=` `0` `, ` `0` `count ` `=` `defaultdict(` `lambda` `: ` `0` `) ` ` ` `print` `(maxPal(string, count, start, end)) ` |

*chevron_right*

*filter_none*

**Output:**

6

## Recommended Posts:

- Length of the longest substring that do not contain any palindrome
- Maximum length substring having all same characters after k changes
- Maximum length substring with highest frequency in a string
- Maximum length palindrome that can be created with characters in range L and R
- Length of the largest substring which have character with frequency greater than or equal to half of the substring
- Minimum length of the sub-string whose characters can be used to form a palindrome of length K
- Minimum removal to make palindrome permutation
- Palindrome Substring Queries
- Queries to check if substring[L...R] is palindrome or not
- Queries on substring palindrome formation
- Longest Even Length Substring such that Sum of First and Second Half is same
- Find max length odd parity substring
- Length of the longest valid substring
- Length of the longest substring with equal 1s and 0s
- Nth Even length Palindrome

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.