【问题标题】:Writing a function that checks if a string is a palindrome [duplicate]编写一个检查字符串是否为回文的函数
【发布时间】:2015-10-25 21:31:13
【问题描述】:

我需要编写一个函数来确定给定字符串是否为回文。以下是我目前写的:

def isPalindrome(string):
    found = False
    for i in range(len(string)):
        if string[i] == string[len(string) - 1 - i]:
            found = True

    if found == True:
        print("Inserted string is a palindrome. ")
    else:
        print("Inserted string is not a palindrome. ")

    return

我遍历字符串,并检查前向和后向迭代是否给出相同的字符。但是如果我通过执行 isPalindrome("hello") 来应用这个程序,它会说这是一个回文。它没有给我正确的输出。有人可以指出我犯的任何错误,以便我从中吸取教训。

【问题讨论】:

  • 检查字母是否不匹配。一旦发生这种情况,就断定这不是回文。
  • 如果 any 镜像字符对匹配,则您将 found 设置为 True。相反,您希望 True 是 所有 镜像对匹配。因此将其初始化为 True,然后在循环中将其设置为 False,如果它们 不 匹配。

标签: python


【解决方案1】:

当您发现 any 字符等于“镜像”字符时,您将 found 设置为 true。例如,对于具有奇数个字符的单词,这总是正确的(中间字符等于中间字符),但其他单词也会生成错误匹配。以单词winner 为例,其中的两个ns 处于镜像位置,您的函数将声明它是回文,而显然不是。

不要将found 设置为true,如果发现不匹配,请提前退出:

found = True
for i in range(len(string)):
    if string[i] != string[len(string) - 1 - i]:
        found = False
        break

所以你开始假设它是一个回文,当你发现相反的证据时你退出。

请注意,当您检查了一半的字符串时,您可以停止检查:

for i in range((len(string) + 1) // 2):
    if string[i] != string[len(string) - 1 - i]:
        found = False
        break

或者你可以只测试字符串是否等于它的反向; [::-1] 为您提供反转的字符串:

string == string[::-1]

【讨论】:

  • 谢谢。这很清楚。
猜你喜欢
  • 2017-03-28
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多