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
命令 — 应该会让您前进。
我正在研究寻找有效回文的解决方案,其中空字符串将被视为有效回文。这个问题忽略了任何不是字母数字的情况。 以下是一些示例:
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
命令 — 应该会让您前进。