我需要帮助使我的程序更精简,因为我确定我遗失的很多东西在哪里

时间:2017-02-23 14:00:54

标签: python

测试字符串是否是回文并且应该是O(n)运行时。我们不能使用任何import语句或任何其他辅助方法。

所以基本上我的程序是接收一个输入,这是一个可以包含任何内容的字符串。如果该字符串中的某些内容不是字母表的一部分,则忽略它,例如空格或逗号。我的程序目前正在运行,但似乎应该有办法让我的程序更好,通过减少代码或我不知道的东西。

一个例子是字符串'EUV,vV V,U,E'所以我做的第一件事就是它转到字符串[0],它只是一个空格和短裤用isPalindrome回忆自己(字符串[1 ]:len(string)-1)所以isPalindrome('EUV,vV V,U,E')。

def isPalindrome (string):
    if len(string) <=1:                 # Basecase to check if the string has less than or equal to 1 element remaining in the string so that the recursion may end
            return True
    if string.isalpha():                    # Checks if the string is all letters of the alphabet and proceeds if true
            if (string[0].lower() == string[len(string)-1].lower()):                    # Compares the lowercase form of the first element and the last element and if they are equal the program will proceed
                    return isPalindrome(string[1:len(string)-1])                    # Function is calling itself with the next elements in the string
            else:
                    return False
    else:
            if string[0].isalpha():                 # Checks if the first element in the string is part of the alphabet and proceeds if true
                    if string[len(string)-1].isalpha():                 # Checks if the last element of the string is part of the element and proceeds if true
                            if (string[0].lower()== string[len(string)-1].lower()):                 # Both the first and last element have been confirmed as being part of the alphabet and will not be compared to each other, program proceeds if true
                                    return isPalindrome(string[1:len(string)-1])                    # Function is calling itself with the next elements in the string
                            else:
                                    return False                    # Program return false when some elements do not equal each other
                    else:
                            return isPalindrome(string[0:len(string)-1])                    # Function is calling itself with the next elements in the string
            else:
                    return isPalindrome(string[1:len(string)])                  # Function is calling itself with the next elements in the string

1 个答案:

答案 0 :(得分:1)

嗯,这是很多用于回文检查的代码。

基本上,回文是一个字符串,如果从末尾读取则等于它自己。您可以使用字符串上的切片表示法来检查。现在要从不是字母的所有内容中清除你的字符串,一个小的列表理解就可以了。

def isPalindrome(text):
    text = "".join([x for x in text if x.isalpha()])
    return text==text[::-1]