测试字符串是否是回文并且应该是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
答案 0 :(得分:1)
嗯,这是很多用于回文检查的代码。
基本上,回文是一个字符串,如果从末尾读取则等于它自己。您可以使用字符串上的切片表示法来检查。现在要从不是字母的所有内容中清除你的字符串,一个小的列表理解就可以了。
def isPalindrome(text):
text = "".join([x for x in text if x.isalpha()])
return text==text[::-1]