我失败了最后一个测试用例,它是带有空格和单引号的测试用例。 我使用了s.strip,但错误仍然存在。
还有其他方法可以解决这个问题吗?
谢谢。
from test import testEqual
def removeWhite(s):
s.strip()
s.strip("'")
return s
def isPal(s):
if s == "" or len(s) == 1:
return True
if removeWhite(s[0]) != removeWhite(s[-1]):
return False
return isPal(removeWhite(s[1:-1]))
testEqual(isPal(removeWhite("x")),True)
testEqual(isPal(removeWhite("radar")),True)
testEqual(isPal(removeWhite("hello")),False)
testEqual(isPal(removeWhite("")),True)
testEqual(isPal(removeWhite("hannah")),True)
testEqual(isPal(removeWhite("madam i'm adam")),True)
答案 0 :(得分:0)
首先,removeWhite
函数不返回所有空格,因为strip仅从字符串的结尾和开头删除。参见:
>>> " a ".strip()
'a'
>>> " a a ".strip()
'a a'
所以我建议采用这种方法:
def removeWhite(s):
return ''.join(filter(lambda x: x not in " '", s))
请注意我使用join,因为filter返回一个需要转换回字符串的迭代器。
为了找到回文,我会建议这个功能:
def isPal(s):
if len(s) <= 1: # Special case to prevent KeyError later
return True
stripped = removeWhite(s) # Strip off all whitespaces
first = stripped[:len(stripped) // 2] # First half of the string
if len(stripped) % 2: # Length of string is even?
second = stripped[len(stripped) // 2 + 1:] # Drop the middle character
else:
second = stripped[len(stripped) // 2:] # Else keep it
secondrev = ''.join(reversed(second)) # Reverse the second half
return first == secondrev # And return wether they're equal.
这适用于您的所有示例。但是,如果您修复了isPal
函数
removeWhite
函数也应该有效