File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change
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 ])
You can’t perform that action at this time.
0 commit comments