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:

- Maximum length substring having all same characters after k changes
- Maximum length substring with highest frequency in a string
- Minimum removal to make palindrome permutation
- Palindrome Substring Queries
- Queries on substring palindrome formation
- Longest Even Length Substring such that Sum of First and Second Half is same
- Length of the longest substring with equal 1s and 0s
- Length of the longest valid substring
- Length of the longest substring without repeating characters
- Substring with highest frequency length product
- Minimum K such that every substring of length atleast K contains a character c
- Convert to a string that is repetition of a substring of k length
- Nth Even length Palindrome
- Sum of first K even-length Palindrome numbers
- Binary String of given length that without a palindrome of size 3