forked from keon/algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
palindrome_partitioning.py
32 lines (29 loc) · 1.15 KB
/
palindrome_partitioning.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
""" It looks like you need to be looking not for all palindromic substrings,
but rather for all the ways you can divide the input string up into palindromic substrings.
(There's always at least one way, since one-character substrings are always palindromes.)
"""
def palindromic_substrings(s):
if not s:
return [[]]
results = []
for i in range(len(s), 0, -1):
sub = s[:i]
if sub == sub[::-1]:
for rest in palindromic_substrings(s[i:]):
results.append([sub] + rest)
return results
""" There's two loops.
The outer loop checks each length of initial substring (in descending length order) to see
if it is a palindrome. If so, it recurses on the rest of the string and loops over the returned
values, adding the initial substring to each item before adding it to the results.
"""
# A slightly more Pythonic approach would be to make a recursive generator:
def palindromic_substrings(s):
if not s:
yield []
return
for i in range(len(s), 0, -1):
sub = s[:i]
if sub == sub[::-1]:
for rest in palindromic_substrings(s[i:]):
yield [sub] + rest