我正在研究一种寻找有效回文的解决方案,其中空字符串将被视为有效回文。该问题将忽略所有非字母数字的情况。以下是一些示例:
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
返回字母是否为小写字母。首次尝试将'A'.islower()
(即False
)与'a'.islower()
(即True
)进行比较时,这将失败。您需要的比较是
elif s[i].lower() != s[j].lower():
即将两个字母都小写并进行比较。
在索引处理中还有更多问题,但是,这和一些print
命令应该会让您动起来。