8 或 9 个字母的回文错误

palindrome error with 8 or 9 letters

我有以下代码,在检查 python 时,选项 aaabaaaa、zzzazzazz 给了我错误的 test.Here 是代码,我不太确定如何修复它。

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

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

短路

另一个问题(不是真正的问题,更多的是吹毛求疵)是您可以只使用整数除法 //,而不必导入 mathfloor 函数.

所以,

def isPalindrome(string):
    for i in range(0, len(string) // 2):
        if string[i] != string[-(i + 1)]:
            return False

    return True

另一种处理方法是使用 all:

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

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

def isPalindrome(string):
    return string == string[::-1]

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

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]

另一种方法可能是使用切片。字符串可以像 arrays/lists 这样通过索引访问,也可以像这样倒置

def isPalindrom(string)
    return string == string[::-1]

[::-1] 切片returns 反转字符串,与原字符串比较如果相同则为真,否则为假。