1
我有一个字符串,我需要找出palindromic sub-string of length 4
(all
4 indexes
子字符串),其中索引应该在ascending order (index1<index2<index3<index4)
中。 我的代码适用于像mystr
这样的小字符串。但是,当涉及到大字符串时,需要很长时间。从Python中的排列中查找Palidrome
from itertools import permutations
#Mystr
mystr = "kkkkkkz" #"ghhggh"
#Another Mystr
#mystr = "kkkkkkzsdfsfdkjdbdsjfjsadyusagdsadnkasdmkofhduyhfbdhfnsklfsjdhbshjvncjkmkslfhisduhfsdkadkaopiuqegyegrebkjenlendelufhdysgfdjlkajuadgfyadbldjudigducbdj"
l = len(mystr)
mylist = permutations(range(l), 4)
cnt = 0
for i in filter(lambda i: i[0] < i[1] < i[2] < i[3] and (mystr[i[0]] + mystr[i[1]] + mystr[i[2]] + mystr[i[3]] == mystr[i[3]] + mystr[i[2]] + mystr[i[1]] + mystr[i[0]]), mylist):
#print(i)
cnt += 1
print(cnt) # Number of palindromes found
我可以用其他方式加速吗?只要给我一个提示,我会尝试。 –
我建议阅读[this](https://books.google.ca/books?id=9NdohJXtIyYC&lpg=PP1&ots=llc90BNZHd&dq=rytter+jewels+o&pg=PA111&redir_esc=y&hl=en#v=onepage&q&f=false)很好的分析一些可能会帮助你的算法。或者你可以找到一个关于寻找最长回文的算法的好教程(这里)(http://www.geeksforgeeks.org/dynamic-programming-set-12-longest-palindromic-subsequence/),你可能会适应它为你的情况。目前你正在使用一种非常暴力的方法,所以改善你的算法是你最好的选择。 – bunji
你可以进一步节省一些毫秒m == m [:: - 1] 在左手边节省一些计算 –