嘿大家我一直在为python 2.7中最长的回文算法挑战而苦苦挣扎。我越来越近但有一个小错误,我无法弄清楚。我有回文工作,但无法获得最长的回文打印正确,要么给我一个字符缓冲区错误或打印0.
def palindrome(string):
string = "".join(str.split(" ")).lower()
i = 0
while i < len(string):
if string[i] != string[(len(string) - 1) - i]:
return False
i += 1
return True
print palindrome("never odd or even")
def longest_palindrome(string):
best_palindrome = 0
i1 = 0
while i1 < len(string):
length = 1
while (i1 + length) <= len(string):
substring = string.split(i1,length)
if palindrome(substring) and (best_palindrome == 0 or len(substring) > len(best_palindrome)):
best_palindrome = substring
length += 1
i1 += 1
return best_palindrome
print longest_palindrome("abcbd")
答案 0 :(得分:1)
根据我的理解,你的第一种方法是检查一个字符串是否是回文,你的第二种方法是找到最长的回文。
无论输入是什么,您发布的回文代码始终返回true,因为
string = "".join(str.split(" ")).lower()
返回一个空字符串。我将这部分代码更改为
string = string.replace(" ", "").lower()
我相信它会为您提供删除所有空格并使字符串变成小写的理想效果。
接下来,你的第二种方法应该循环遍历所输入字符串的所有可能的子串,并检查a)它是一个回文并且b)它是否比先前最大的回文更长。
字符串&#34; doloa&#34;的示例将是:
doloa; is palindrome=false;
dolo; is palindrome=false;
dol; is palindrome=false;
do; is palindrome=false;
d; is palindrome=true; is bigger than previous large palindrome=true;
oloa; is palindrome=false;
olo; is palindrome=true; is bigger than previous large palindrome=true;
你会为整个字符串继续这个循环,最后,你的变量&#39; best_palindrome&#39;应该包含最大的回文。
我修复了你的代码,我相信这应该有用(请告诉我这是否是你想要的输出)。
def palindrome(string):
comb = string.replace(" ", "").lower()
# print(comb)
# print(len(comb))
i = 0
while i < len(comb):
# print(comb[i] + ":" + comb[(len(comb) - 1) - i] + " i: " + str(i) + ", opposite: " + str((len(comb) - 1) - i))
if comb[i] != comb[(len(comb) - 1) - i]:
return False
i += 1
return True
print palindrome("never odd or even")
def longest_palindrome(string):
best_palindrome = ""
i1 = 0
while i1 < len(string):
length = 0
while (i1 + length) <= len(string):
substring = string.replace(" ", "").lower()
substring = substring[i1:len(substring)-length]
#print("Substring: " + str(substring))
if palindrome(substring) and (best_palindrome == "" or len(substring) > len(best_palindrome)):
best_palindrome = substring
length += 1
i1 += 1
return best_palindrome
print longest_palindrome("bgologdds")
注意:我更改了一些变量的名称,并且还添加了一些打印字符串以供调试。您可以删除它们或取消注释它们以供将来调试。