Skip to content

Commit 8a996c4

Browse files
committed
Palindrome Partitioning/ Palindrome Partitioning II
1 parent 80d8092 commit 8a996c4

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

131 Palindrome Partitioning.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'''
2+
Given a string s, partition s such that every substring of the partition is a palindrome.
3+
4+
Return all possible palindrome partitioning of s.
5+
6+
For example, given s = "aab",
7+
Return
8+
9+
[
10+
["aa","b"],
11+
["a","a","b"]
12+
]
13+
'''
14+
15+
class Solution(object):
16+
def partition(self, s):
17+
"""
18+
:type s: str
19+
:rtype: List[List[str]]
20+
"""
21+
if not s:
22+
return [[]]
23+
result = []
24+
for i in range(len(s)):
25+
if self.isPalindrome(s[:i + 1]):
26+
for r in self.partition(s[i + 1:]):
27+
result.append([s[:i + 1]] + r)
28+
return result
29+
30+
def isPalindrome(self, s):
31+
return s == s[::-1]
32+
33+
34+
if __name__ == "__main__":
35+
assert Solution().partition("aab") == [
36+
["a", "a", "b"],
37+
["aa", "b"]
38+
]

132 Palindrome Partitioning II.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'''
2+
Given a string s, partition s such that every substring of the partition is a palindrome.
3+
4+
Return the minimum cuts needed for a palindrome partitioning of s.
5+
6+
For example, given s = "aab",
7+
Return 1 since the palindrome partitioning ["aa","b"] could be produced using 1 cut.
8+
'''
9+
10+
class Solution(object):
11+
def minCut(self, s):
12+
"""
13+
:type s: str
14+
:rtype: List[List[str]]
15+
"""
16+
n = len(s)
17+
dp = [0 for __ in range(n)]
18+
isPal = [[False for __ in range(n)] for __ in range(n)]
19+
for i in range(n):
20+
m = i
21+
for j in range(i + 1):
22+
if s[j] == s[i] and (j + 1 > i - 1 or isPal[j + 1][i - 1]):
23+
isPal[j][i] = True
24+
m = 0 if j == 0 else min(m, dp[j - 1] + 1)
25+
dp[i] = m
26+
return dp[-1]
27+
28+
29+
if __name__ == "__main__":
30+
assert Solution().minCut("aab") == 1

0 commit comments

Comments
 (0)