mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +00:00
Added code for palindrome partitioning problem under dynamic programming (#7222)
* Added code for palindrome partitioning problem under dynamic programming * Updated return type for function * Updated Line 24 according to suggestions * Apply suggestions from code review Co-authored-by: Caeden Perelli-Harris <caedenperelliharris@gmail.com> * Update palindrome_partitioning.py * Update palindrome_partitioning.py * is_palindromic Co-authored-by: Christian Clauss <cclauss@me.com> Co-authored-by: Caeden Perelli-Harris <caedenperelliharris@gmail.com>
This commit is contained in:
parent
d1430aa36b
commit
47100b992a
39
dynamic_programming/palindrome_partitioning.py
Normal file
39
dynamic_programming/palindrome_partitioning.py
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
"""
|
||||||
|
Given a string s, partition s such that every substring of the
|
||||||
|
partition is a palindrome.
|
||||||
|
Find the minimum cuts needed for a palindrome partitioning of s.
|
||||||
|
|
||||||
|
Time Complexity: O(n^2)
|
||||||
|
Space Complexity: O(n^2)
|
||||||
|
For other explanations refer to: https://www.youtube.com/watch?v=_H8V5hJUGd0
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def find_minimum_partitions(string: str) -> int:
|
||||||
|
"""
|
||||||
|
Returns the minimum cuts needed for a palindrome partitioning of string
|
||||||
|
|
||||||
|
>>> find_minimum_partitions("aab")
|
||||||
|
1
|
||||||
|
>>> find_minimum_partitions("aaa")
|
||||||
|
0
|
||||||
|
>>> find_minimum_partitions("ababbbabbababa")
|
||||||
|
3
|
||||||
|
"""
|
||||||
|
length = len(string)
|
||||||
|
cut = [0] * length
|
||||||
|
is_palindromic = [[False for i in range(length)] for j in range(length)]
|
||||||
|
for i, c in enumerate(string):
|
||||||
|
mincut = i
|
||||||
|
for j in range(i + 1):
|
||||||
|
if c == string[j] and (i - j < 2 or is_palindromic[j + 1][i - 1]):
|
||||||
|
is_palindromic[j][i] = True
|
||||||
|
mincut = min(mincut, 0 if j == 0 else (cut[j - 1] + 1))
|
||||||
|
cut[i] = mincut
|
||||||
|
return cut[length - 1]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
s = input("Enter the string: ").strip()
|
||||||
|
ans = find_minimum_partitions(s)
|
||||||
|
print(f"Minimum number of partitions required for the '{s}' is {ans}")
|
Loading…
Reference in New Issue
Block a user