-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path5.linningmii.py
66 lines (49 loc) · 1.77 KB
/
5.linningmii.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# FIXME 有时候会超时, 需要优化
class Solution:
def __init__(self):
self.input_char_list = []
def extend_palindrome(self, i):
if i == len(self.input_char_list) - 1:
return self.input_char_list[-1]
back = i - 1
forward = i + 1
odd_pal = [self.input_char_list[i]]
while back >= 0 and forward < len(self.input_char_list):
if self.input_char_list[back] == self.input_char_list[forward]:
odd_pal = self.input_char_list[back: forward + 1]
back -= 1
forward += 1
else:
back = -1
longest_pal = ''.join(odd_pal)
if self.input_char_list[i] == self.input_char_list[i + 1]:
back = i - 1
forward = i + 2
even_pal = self.input_char_list[i: i + 2]
while back >= 0 and forward < len(self.input_char_list):
if self.input_char_list[back] == self.input_char_list[forward]:
even_pal = self.input_char_list[back: forward + 1]
back -= 1
forward += 1
else:
back = -1
if len(even_pal) > len(odd_pal):
longest_pal = ''.join(even_pal)
return longest_pal
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if len(s) < 2:
return s
self.input_char_list = list(s)
longest_pal = ''
for i in range(len(s)):
pal = self.extend_palindrome(i)
if len(longest_pal) < len(pal):
longest_pal = pal
return longest_pal
solution = Solution()
print(solution.longestPalindrome("bab"))
print(solution.longestPalindrome("cbbd"))