在python 2.7中坚持最长的回文算法

时间:2016-12-31 21:19:13

标签: python algorithm

嘿大家我一直在为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") 

1 个答案:

答案 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") 

注意:我更改了一些变量的名称,并且还添加了一些打印字符串以供调试。您可以删除它们或取消注释它们以供将来调试。