Python 中的有效回文解决方案无效

Valid Palindrome solution in Python not working

我正在研究寻找有效回文的解决方案,其中空字符串将被视为有效回文。这个问题忽略了任何不是字母数字的情况。 以下是一些示例:

Input: "A man, a plan, a canal: Panama"
Output: true

Input: "race a car"
Output: false

我写了一个解决方案,如果遇到非字母数字字符,该字符将被跳过:

def isPalindrome(self, s):
1        """
2        :type s: str
3        :rtype: bool
4        """
5        """
6        for i in s:
7            if (i.isupper())==True:
8                i.lower()
9        """
10        if len(s)==0:
11            return True
12        print(s)

13        i = 0
14        j = len(s) - 1

15        while(i<=j):  
16            if s[i].isalnum()==False:
17                i+=1
18            elif s[j].isalnum() == False:
19                j-=1
20            elif s[i].islower() != s[j].islower():
21                return False
22            i+=1
23            j-=1
24            
25        return True

但是我不断得到以下结果:

Your input
"A man, a plan, a canal: Panama"
stdout
A man, a plan, a canal: Panama


Output
false

Expected
true

我做错了什么?

当我正要关闭这个标签时,第一个问题突然出现了:

        elif s[i].islower() != s[j].islower():

不是您需要的比较。 islower returns 字母是否小写。这将在您第一次尝试时失败,将 'A'.islower()(即 False)与 'a'.islower()(即 True)进行比较。你需要的比较是

        elif s[i].lower() != s[j].lower():

即将两个字母都变为小写并进行比较。

在您的索引处理中存在更多问题,但是这 — 以及一些 print 命令 — 应该会让您前进。