Splitting a string into the fewest number of palindromes
Thu Feb 18 2021tags: draft programming leetcode algorithms computer science
Started 645pm
Question Number 181
Good morning! Here's your coding interview problem for today.
This problem was asked by Google.
Given a string, split it into as few strings as possible such that each string is a palindrome.
For example, given the input string
racecarannakayak
, return["racecar", "anna", "kayak"]
.Given the input string
abc
, return["a", "b", "c"]
.
Problem analysis
Call a partition
a list of indices
where each index denotes where to split the string.
A partition is valid if each substring
is a palindrome.
A partition is minimal if len(indices)
is
the smallest for all possible valid partitions.
The recurrence relation is as follows: The minimal partition of is the minimum of minimal partitions of all where is a palindrome.
That is to say, for each k where is a palindrome, recurse into the subproblem of finding a minimal partition for .
I believe the time complexity is . In the worst case each substring is a palindrome, so you have to check all the substrings. With memoisation each lookup of a substring is , and checking whether a substring is a palindrome should also take constant time if a subsubstring already exists (checking if is a palindrome is if you have memoised ). memory complexity.
Pseudocode:
# TODO