我想知道这段代码是哪种O符号,有人可以帮我搞清楚吗?我写了它,但当我被问及哪种O符号是什么时,我唯一可以说它是线性的,但我觉得递归+迭代应该是指数的?
listPlindromes = []
def palindrome( givenString, n ):
if n == 1:
#print givenString
return None
else:
#print givenString[:n]
#print ('forward: '+givenString[:n] +' backwards: '+givenString[:n][::-1])
#Get difference between lengths
lenDifference = len(givenString) - len(givenString[:n])
#If there is a difference means there at least one more word/palindrome could exist
#therefore it need to be tested
if lenDifference > 0:
for xTest in range(0,lenDifference-1) :
newWord=givenString[xTest:n+xTest]
if newWord == newWord[::-1]:
if len(newWord) > 0:
listPlindromes.append(newWord)
#print newWord
else:
if givenString[:n] == givenString[:n][::-1]:
listPlindromes.append(givenString[:n])
#print('palindrome: '+givenString)
return palindrome(givenString,n-1)
givenString='osooso'
palindrome(givenString, len(givenString))
print(listPlindromes)
答案 0 :(得分:1)
你所获得的代码以线性时间运行;也就是说,它的主要瓶颈是你给它的字符串有多大。
尽管如此,有些事情可以改进:
至于迭代+递归方法,它实际上取决于它是如何创作的,但我有一个递归方法,也可能是O(n)。
*:无论字符串是偶数还是奇数,将它切成两半都会在两边都给出偶数个字符。
答案 1 :(得分:-1)
简单解决方案:
def palchecker(aString):
aString = aString.lower()
reverse = aString[::-1]
if aString == reverse:
return True
return(False)
print(palchecker("lsdkjfskf"))
print(palchecker("aIbohPhoBiA"))