怎么用python3代码检查回文序列?

检查回文序列的核心是判断其与反转结果是否相同。Python中可通过切片s[::-1]直接比较,或用双指针法从两端向中间遍历比较字符,前者简洁,后者节省空间。根据需求可统一转小写并过滤非字母数字字符。

检查回文序列的核心思路是判断一个序列是否与其反转后的结果相同。Python3 中可以利用字符串或列表的切片特性快速实现。

使用字符串切片检查回文

字符串切片 [::-1] 可以将字符串反转,直接与原字符串比较即可。

- 将输入统一转为小写,避免大小写影响判断 - 去除空格和标点符号(可选,视需求而定) - 使用 == 比较原字符串和反转字符串

示例代码:

def is_palindrome(s):
    s = s.lower() # 统一转小写
    s = ''.join(filter(str.isalnum, s)) # 只保留字母数字
    return s == s[::-1]

print(is_palindrome("A man a plan a canal Panama")) # True
print(is_palindrome("racecar")) # True
print(is_palindrome("hello")) # False

使用双指针法检查回文

不创建新字符串,节省内存。用两个指针从头尾向中间移动,逐个比较字符。

- 左指针从索引 0 开始,右指针从末尾开始 - 跳过非字母数字字符 - 一旦发现不相等就返回 False

示例代码:

def is_palindrome_two_pointers(s):
    left, right = 0, len(s) - 1
    s = s.lower()

    while left         if not s[left].isalnum():
            left += 1
        elif not s[right].isalnum():
            right -= 1
        else:
            if s[left] != s[right]:
                return False
            left += 1
            right -= 1
    return True

检查纯字符串或数字回文(不考虑标点)

如果只关心字母本身且输入已清理,可以直接用切片。

def simple_palindrome(s):
    return s == s[::-1]

print(simple_palindrome("abba")) # True
print(simple_palindrome("abc")) # False

基本上就这些。根据你的数据情况选择方法:简单场景用切片,复杂文本推荐过滤后再处理。双指针适合对空间要求高的情况。