Lintcode上最长的Palindromic子串

时间:2018-03-19 21:10:48

标签: python index-error

我是一个python入门者,我正在尝试解决Lintcode上的Longest Palindromic Substring问题。描述是:“给定一个字符串S,找到S中最长的回文子字符串。您可以假设S的最大长度为1000,并且存在一个唯一最长的回文子字符串。”我运行了我的代码,它显示了

  

第12行,在ispalindrome中,而k [0] == k [-1]:IndexError:字符串索引超出范围。

我真的不知道如何提出这个错误。任何人都可以帮我查看我的代码。

writeWithValue

2 个答案:

答案 0 :(得分:0)

代码应如下所示:

def longestPalindrome(s):
# write your code here
if len(s) == 0 or len(s) == 1:
    return s
else:
    def ispalindrome(k):
        while k and (k[0]==k[-1]):
            k = k[1:-1]
        if len(k) > 1:
            return False
        else:
            return True
    longestPalindromeLength=-1
    palindromeToReturn=None
    for i in s:
        if s.rfind(i) > s.find(i):
            subStr = s[s.find(i):s.rfind(i)+1]
            if ispalindrome(subStr) == True and longestPalindromeLength<len(subStr):
                    longestPalindromeLength=len(subStr)
                    palindromeToReturn=subStr
    return palindromeToReturn

答案 1 :(得分:0)

这是我的解决方案,也许你喜欢它!但代码不在python中,而是在js中,但您可以使用逻辑

var temparry = []

    function Fsociety (){

    for (var i = 0; i < input.length; i++) {

        for (var j = 0; j <=input.length - i; j++) {

            //skipping empty strings

            if (input.substring(i, i + j) !== '') {
    
                if (input.substring(i, i + j) === input.substring(i, i + j).split("").reverse("").join("")) {
                    temparry.push(input.substring(i, i + j).length) 
    
                }
            }
        }
    
    
    }
    return temparry
    }

console.log(Math.max(...Fsociety(input)))// I'm telling math to give me the max value inside the temparry and here i'm passing function as a value
// console.log(Fsociety(input))
<块引用>

<---- 在第二个 if 语句中,我告诉 js 检查它是否是 回文与否首先将其拆分为单个元素,然后 反转它然后我将简单地加入它,因为它是我将使用的字符串 === 告诉 js 检查它们是否相等是根据回文的定义,如果一个单词等于它的反向那么它是 回文 ---->