python - Leetcode 5 最长回文子串 (python)
问题描述
为什么我使用此代码得到错误答案?我尝试找到所有可能的子字符串,并在将它们存储到列表后找到最长的子字符串。谢谢您的帮助!
class Solution:
def longestPalindrome(self, s: str) -> str:
length = len(s)
#get all possible substrings
combinations = [s[i:j] for i in range(length) for j in range(i+1, length+1)]
#print(combinations)
rev = s[::-1]
rev_combinations = [rev[i:j] for i in range(length) for j in range(i+1, length+1)]
#print(rev_combinations)
pan_l = []
for i, c in enumerate(combinations)):
if combinations[i] == rev_combinations[i]:
pan_l.append(combinations[i])
if pan_l:
y = max(pan_l, key=len)
return y
else:
return s[0]
解决方案
考虑字符串"ab"
。这会给combinations == ['a', 'ab', 'b']
. 它的反面,"ba"
,给出rev_combinations == ['b', 'ba', 'a']
。'a'
您会看到没有一个项目在它们的确切位置匹配,尽管'b'
它们都是微不足道的回文。
处理这个问题的更好方法是检查每个子字符串是否是回文:
pan_l = []
for substring in combinations:
if substring == substring[::-1]: # this substring is a palindrome
pan_l.append(substring)
然后你不需要rev
或根本不需要rev_combinations
。
推荐阅读
- mysql - 如何在 mysql 中设置 SELECT 语句的输出值?
- unity3d - Unity 2D 不同敌人的相同状态问题
- php - 警告:mysqli_close():无法获取 mysqli
- java - 尝试用 String 和 int 从对象填充 ArrayList。不工作
- ruby-on-rails - 如何从 Rails 应用程序中完全删除 Yarn?
- angular - 如何在 Angular 6 中创建抖动动画?
- algorithm - 是否可以在恒定时间内在集合中找到随机元素?
- c# - StartIndex 不能小于零。参数名称:startIndex 使用 HijriDatePicker?
- node.js - 为什么开发和生产中 hexo 的文件夹结构不同?
- django-rest-framework - 自定义 ModelViewSet 以指向 Get 和 Patch 的相同 URL