Skip to content

Commit 7ca1591

Browse files
authored
Create maximize-palindrome-length-from-subsequences.py
1 parent 60e5fc3 commit 7ca1591

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Time: O((m + n)^2)
2+
# Space: O((m + n)^2)
3+
4+
class Solution(object):
5+
def longestPalindrome(self, word1, word2):
6+
"""
7+
:type word1: str
8+
:type word2: str
9+
:rtype: int
10+
"""
11+
s = word1+word2
12+
dp = [[0]*len(s) for _ in xrange(len(s))]
13+
result = 0
14+
for j in xrange(len(s)):
15+
dp[j][j] = 1
16+
for i in reversed(xrange(j)):
17+
if s[i] == s[j]:
18+
dp[i][j] = 2 if i+1 == j else dp[i+1][j-1] + 2
19+
if i < len(word1) <= j:
20+
result = max(result, dp[i][j])
21+
else:
22+
dp[i][j] = max(dp[i+1][j], dp[i][j-1])
23+
return result
24+
25+
26+
# Time: O((m + n)^2)
27+
# Space: O((m + n)^2)
28+
class Solution2(object):
29+
def longestPalindrome(self, word1, word2):
30+
"""
31+
:type word1: str
32+
:type word2: str
33+
:rtype: int
34+
"""
35+
s = word1+word2
36+
dp = [[0]*len(s) for _ in xrange(len(s))]
37+
for j in xrange(len(s)):
38+
dp[j][j] = 1
39+
for i in reversed(xrange(j)):
40+
if s[i] == s[j]:
41+
dp[i][j] = 2 if i+1 == j else dp[i+1][j-1] + 2
42+
else:
43+
dp[i][j] = max(dp[i+1][j], dp[i][j-1])
44+
return max([dp[i][j] for i in xrange(len(word1)) for j in xrange(len(word1), len(s)) if s[i] == s[j]] or [0])

0 commit comments

Comments
 (0)