我有以下代码,当浏览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
答案 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。