は、ここでは(たぶん)だけでなく、いくつかのヒントを使用してコードをコメントし、あなたにあります。
#!/usr/bin/env python2
# Let's take this string:
a = "palindnilddafa"
# I surround with a try/catch block, explanation following
try:
# In this loop I go from length of a minus 1 to 0.
# range can take 3 params: start, end, increment
# This way I start from the thow longest subsring,
# the one without the first char and without the last
# and go on this way
for i in range(len(a)-1, 0, -1):
# In this loop I want to know how many
# Palidnrome of i length I can do, that
# is len(a) - i, and I take all
# I start from the end to find the largest first
for j in range(len(a) - i):
# this is a little triky.
# string[start:end] is the slice operator
# as string are like arrays (but unmutable).
# So I take from j to j+i, all the offsets
# The result of "foo"[1:3] is "oo", to be clear.
# with string[::-1] you take all elements but in the
# reverse order
# The check string1 in string2 checks if string1 is a
# substring of string2
if a[j:j+i][::-1] in a:
# If it is I cannot break, 'couse I'll go on on the first
# cycle, so I rise an exception passing as argument the substring
# found
raise Exception(a[j:j+i][::-1])
# And then I catch the exception, carrying the message
# Which is the palindrome, and I print some info
except Exception as e:
# You can pass many things comma-separated to print (this is python2!)
print e, "is the longest palindrome of", a
# Or you can use printf formatting style
print "It's %d long and start from %d" % (len(str(e)), a.index(str(e)))
議論の後、私は少しお悔やみ申し上げます。私はpalindrome-searcherの別の実装を書いています。もしsberry2Aができるなら、私はいくつかのベンチマークテストの結果を知りたいと思います!
ポインタとハードな「+1 -1」問題については、多くのバグがありますが、そのアイデアははっきりしています。真ん中から始めてできるだけ早く展開してください。これらは共通で何を持っていない、3つの独立した質問です
#!/usr/bin/env python2
def check(s, i):
mid = s[i]
j = 1
try:
while s[i-j] == s[i+j]:
j += 1
except:
pass
return s[i-j+1:i+j]
def do_all(a):
pals = []
mlen = 0
for i in range(len(a)/2):
#print "check for", i
left = check(a, len(a)/2 + i)
mlen = max(mlen, len(left))
pals.append(left)
right = check(a, len(a)/2 - i)
mlen = max(mlen, len(right))
pals.append(right)
if mlen > max(2, i*2-1):
return left if len(left) > len(right) else right
string = "palindnilddafa"
print do_all(string)
:
は、ここでは、コードです。そして、一般的に、あなたは問題を抱えていないようです。 – SilentGhost
問題は彼が言語に慣れていないことと、すでに「狂った方法」を探していることです:-D .. btw、なぜstring.split( '/')[1]は巧妙ではないのですか? –
@ Parsetongueあなたはすでに何を持っていますか? – OscarRyz