def isPlidrom(obj):
if 1 == len(obj):
return True
if obj[0] == obj[len(obj)-1]:
return isPlidrom()
else:
return False
这里return isPlidrom()里面的参数该怎么写?obj此时应该从开始位置加1,末尾位置减一,如果是c的话 return isplidrom(str+1,len-2)就行了,这里python该怎么写呢
isPlidrom(obj[1:-1]),但不建议这么写。建议再加一个函数,写成 isP(obj,from,to),如果你一定要用递归实现的话。主函数写isP(obj,0,len(obj))
试着写了递归和非递归的算法
# -*- coding: utf-8 -*-
def isPlidromNonRecursive(inputStr):
assert isinstance(inputStr, basestring)
strLen = len(inputStr)
currentStart = 0
currentEnd = strLen - 1
while currentStart <= currentEnd:
if inputStr[currentStart] != inputStr[currentEnd]:
return False
else:
currentStart += 1
currentEnd -= 1
return True
def isPlidromRecursive(inputStr):
assert isinstance(inputStr, basestring)
if 0 <= len(inputStr) <= 1:
return True
if inputStr[0] != inputStr[-1]:
return False
else:
return isPlidromRecursive(inputStr[1:-1])
def test_isPlidromNonRecursive():
assert isPlidromNonRecursive("level")
assert isPlidromNonRecursive("noon")
assert isPlidromNonRecursive("abcd") == False
def test_isPlidromRecursive():
assert isPlidromRecursive("level")
assert isPlidromRecursive("noon")
assert isPlidromRecursive("abcd") == False
if __name__ == '__main__':
test_isPlidromNonRecursive()
test_isPlidromRecursive()