檢查迴文數字/字符串的奇數/偶數長度是否是一個好主意?我遇到的大多數片段都不做這個基本測試。如果長度是偶數,它不能是迴文,否?爲迴文檢查偶數/奇數?
if len(var) % 2 != 0:
# could be a palindrome, continue...
else:
break
或者是直接比較第一個和最後一個數字/字母是否更好(即更快)?
編輯:好的,愚蠢的問題,應該想過兩次! :)
檢查迴文數字/字符串的奇數/偶數長度是否是一個好主意?我遇到的大多數片段都不做這個基本測試。如果長度是偶數,它不能是迴文,否?爲迴文檢查偶數/奇數?
if len(var) % 2 != 0:
# could be a palindrome, continue...
else:
break
或者是直接比較第一個和最後一個數字/字母是否更好(即更快)?
編輯:好的,愚蠢的問題,應該想過兩次! :)
ABBA - palindrome四個字母意思是偶數長度的例子。
一個迴文是一個單詞,短語,number,或characters其他序列讀取相同的向前或向後...
啊!好吧,應該好好想想! :) – 3zzy
還要考慮如果你重複任何單詞向前,然後向後,無論它有偶數還是奇數長度,組合單詞將有一個均勻的長度,例如, hello = helloolleh。 –
我從來沒有猜到這可能是一個有關編程相關問題的有效答案。 –
即使長字符串可以是迴文太。 Wikipedia沒有說這個限制。
簡單情況:aa。
更復雜的情況:aaaa。
依此類推。
每當我讀到「aa」時,我會得到一個膝蓋反應來說「pahoehoe」。 –
試試這個:
is_palindrome = lambda s : all(s1==s2 for s1,s2 in zip(s[:len(s)/2],s[-1:-(len(s)+1)/2:-1]))
只有儘快發現不匹配檢查前半部與後半部,和短路。
這個解決方案需要的內存和@sth一樣多:更簡單的實現,大約是速度的十分之一,並且說「ab」是一個迴文。這裏有一個更好的解決方案,只有固定的內存開銷:all(s [i] == s [-i-1],用於範圍內的len(s)// 2)。這比你的例子快20%左右。 –
哎唷!我的測試是有點*太輕*我已經編輯了我的答案,現在無法測試「ab」。最近我的偏見更多的是迭代元素,而不是使用整數下標進行索引,我想我會稍微區分一下使用從字符串兩端走入的生成器。 – PaulMcG
嘗試islice,izip和扭轉? all(c1 == c2 for c1,c2 in islice(izip(s,reversed(s)),0,len(s)// 2)) –
n=raw_input("Enter a string==>")
n=int(n)
start=0
term=n
while n>0:
result=n%10
start=start*10+result
n=n/10
print start
if term==start:
print "True"
else:
print "False"
Doc,note,I dissent!快速從來不會阻止肥胖,我在鱈魚飲食。 –
@Nimbuz:認爲一次就夠了:-) –
@約翰是的,但我沒有得到它的第一次,所以TWICE ... :) – 3zzy