-4

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

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

[-1::-1]

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

4

3 回答 3

5

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

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
于 2013-09-23T13:02:30.880 回答
4

典型的解决方案是:

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
于 2013-09-23T13:09:16.703 回答
1

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

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

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

于 2013-09-23T12:56:39.370 回答