我正试图找到最长的奇数回文,但我写的代码并没有给我完整的回文,只是它的一部分。任何帮助都会很棒!
def get_odd_palindrome_at(s, index):
''' (str, int) -> str
> get_odd_palindrome_at('tbababt', 3)
'tbababt'
> get_odd_palindrome_at('color', 2)
'olo'
'''
palindrome = s[index]
i = index
for char in s:
if s[i - 1] == s[i + 1]:
palindrome = s[i - 1] + palindrome + s[i + 1]
i = i + 1
return palindrome
答案 0 :(得分:0)
您每次都会移动i
,因此您不会将索引扩展到两个方向,而是每次都将您的3个字母圆圈向右移动。您需要保留原始索引,并且每次从原始索引添加或子结构等量增加索引时:
How you want it to be:
c o l o r
- i -
- i -
How it's doing:
c o l o r
- i -
- i -
所以实际上只需保存索引,并增加边距。此外,您只想迭代index
页边距,而不是字符串,所以:
def get_odd_palindrome_at (s, index):
palindrome = s[index]
for i in range(index):
if s[index - i] == s[index + i]:
palindrome = s[index - i] + palindrome + s[index + i]
else:
break
return palindrome
答案 1 :(得分:0)
使i
与index
保持距离,并确保不要超出范围。最后,只有在找到i
的最终值时才构建结果字符串。在每次迭代中都没有用:
def get_odd_palindrome_at(s, index):
for i in range(1, index+1):
if index + i >= len(s) or s[index - i] != s[index + i]:
i -= 1
break
return s[index-i:index+i+1]
或者,你可以使用两个变量,这简化了代码:
def get_odd_palindrome_at(s, index):
i = index
j = index
while i >= 0 and j < len(s) and s[i] == s[j]:
i -= 1
j += 1
return s[i+1:j]