【问题标题】:Simple Palindrome check in Python? [duplicate]Python中的简单回文检查? [复制]
【发布时间】:2013-09-28 08:57:44
【问题描述】:

我正在为学校做一个回文检查程序,但有一个转折。

现在我已经知道我可以使用反向函数或类似的东西:

[-1::-1]

但是,该程序明确要求不进行字符串切片或使用 .reverse() 函数。那么,我的问题是,如果我不能使用这两种简单的方法,我该怎么做呢?

【问题讨论】:

  • 你可能不得不使用典型的字符比较方法和循环。
  • a[1:-1] 算作切片吗? a[0]呢?
  • 我不认为你会使用[-1::-1],只是[::-1] 工作并且更具可读性。
  • 如果您有新问题,请将其作为新问题提出,而不是编辑现有问题。

标签: python string reverse slice palindrome


【解决方案1】:

很明显,这仅用于学术目的,因为使用反向函数此代码将是微不足道的。

def is_palindrome(string):
    for i,char in enumerate(string):
        if char != string[-i-1]:
            return False
    return True

>>> is_palindrome('hello')
False    
>>> is_palindrome('helloolleh')
True
>>> is_palindrome('')
True
>>> is_palindrome(' ')
True
>>> is_palindrome('a')
True

【讨论】:

  • 开销有点大,但p = lambda s: sum([s[i] != s[-i-1] for i in range(len(s)/2)]) == 0
【解决方案2】:

规范的解决方案是:

def is_palindrome(string):
    result = True
    str_len = len(string)
    for i in range(0, int(str_len/2)): # you need to check only half of the string
        if string[i] != string[str_len-i-1]:
            result = False
            break
    return result # single return statement is considered a good practice

【讨论】:

  • 很好的解决方案,但我不得不质疑在 Python 中单个 return 语句被认为是良好实践的断言。事实上,我会说 break 是不必要的,两个 return 语句更有意义。
【解决方案3】:

实际上,您根本不需要任何reverse 函数来检查某事物是否是回文。考虑:

  • 空字符串是回文
  • 长度为 1 的字符串是回文
  • 如果第一个和最后一个字符相等并且“中间”部分(没有第一个和最后一个字符)是一个回文,则每个其他字符串都是回文。

尝试在 python 中实现它——很简单! (提示:最后一个字符是str[-1],中间是str[1:-1])。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2010-10-19
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 2013-08-19
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多