8或9个字母的回文错误

时间:2018-03-13 00:46:31

标签: python python-3.x palindrome

我有以下代码,当浏览python时,选项aaabaaaa,zzzazzazz给了我错误的测试。这是代码,我不太确定如何解决它。

def checkPalindrome(inputString):
    n=len(inputString)  
    #if string is one letter
    if n==1:
        return True 
    #if string has more than one letter
    for i in range (0, math.floor(n/2)) :
        if inputString[i]!=inputString[n-1-i]:
            return False
        else:
            return True

3 个答案:

答案 0 :(得分:2)

你有一些问题。这里的主要问题是你的else子句在循环中有一个return True。您要做的是在返回True之前完成对字符串的迭代。如果您熟悉布尔逻辑,则相当于使用AND短路。

另一个问题(不是真正的问题,更多是挑剔)是你可以使用整数除法//,而不必导入math的{​​{1}}函数。< / p>

所以,

floor

处理此问题的另一种方法是使用def isPalindrome(string): for i in range(0, len(string) // 2): if string[i] != string[-(i + 1)]: return False return True

all

或者,利用python方便的切片表示法来获得最简洁的解决方案,我们有:

def isPalindrome(string):
    return all(x == y for x, y in zip(string, reversed(string)))

答案 1 :(得分:0)

尝试使用数组切片(反转字符数组)

def checkPalindrome(inputString):
    n=len(inputString)  
    #if string is one letter
    if n==1:
        return True 
    #if string has more than one letter
    return inputString==inputString[::-1]

答案 2 :(得分:0)

另一种方法可能是使用切片。字符串可以通过索引(如数组/列表)访问,也可以像这样反转。

        var cars = new Array("Saab", "Volvo", "BMW", "ZEST", "Audi");
        var output = cars.join(",");
        output = output.replace(/,([^,]*)$/,' and '+'$1');
        console.log(output)

[:: - 1]切片返回反向字符串,如果原始字符串相同则为True,否则为false。