【问题标题】:Leetcode 5 Longest Palindromic Substring (python)Leetcode 5 最长回文子串 (python)
【发布时间】:2021-05-13 10:38:54
【问题描述】:

为什么我使用此代码得到错误答案?我尝试找到所有可能的子字符串,并在将它们存储到列表后找到最长的子字符串。感谢您的帮助!

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]
    
            
        
        
        

【问题讨论】:

  • 我个人认为这些ps问题不应该在StackOverflow中提出,我相信当你的问题发布到更相关的社区时会引起更多的兴趣。

标签: python substring palindrome


【解决方案1】:

考虑字符串"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)

那么你就根本不需要revrev_combinations

【讨论】:

  • 感谢您的建议!我在编码方面有很多工作要做!
【解决方案2】:

Jasmin 提供了您的代码不正确的原因。

一种解决方法是将 rev_combinations 定义为:

#rev = s[::-1]  # Remove this line
# reverse substrings using s[i:j][::-1]
rev_combinations = [s[i:j][::-1] for i in range(length) for j in range(i+1, length+1)]

现在你的代码可以工作了。

【讨论】:

  • 非常感谢您的帮助!祝你有美好的一天(:
猜你喜欢
  • 2023-01-25
  • 2023-01-11
  • 2022-07-16
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
相关资源
最近更新 更多