You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断一个字符串是否为回文?

判断回文字符串的Python实现

嘿,这有几个实用的Python函数实现,能帮你判断一个字符串是不是回文,还考虑了不同的场景需求,我会逐个解释清楚:

1. 简洁版:利用Python切片快速实现

这是最直观也最简洁的写法,适合大多数日常场景:

def is_palindrome(s: str) -> bool:
    # 统一转小写,解决大小写差异(比如"Anna"也应该被判定为回文)
    normalized_s = s.lower()
    # 切片[::-1]直接反转字符串,和原规范化字符串比较
    return normalized_s == normalized_s[::-1]

测试示例:

print(is_palindrome("radar"))   # 输出: True
print(is_palindrome("hello"))   # 输出: False
print(is_palindrome("Anna"))    # 输出: True

关键知识点:

  • s.lower():把所有字符转成小写,避免因大小写不同导致误判(比如"Racecar"和"racecar"其实是回文)。
  • [::-1]:Python的切片技巧,步长为-1时会从序列末尾开始取值,直接生成反转后的字符串,代码简洁又高效。

2. 增强版:支持过滤非字母数字字符

如果需要处理包含标点、空格的字符串(比如经典的"A man, a plan, a canal: Panama"),可以先过滤掉无关字符:

def is_palindrome(s: str) -> bool:
    # 过滤非字母数字字符并转小写:只保留字母/数字,拼接成新字符串
    normalized_s = ''.join([char.lower() for char in s if char.isalnum()])
    return normalized_s == normalized_s[::-1]

测试示例:

print(is_palindrome("A man, a plan, a canal: Panama"))  # 输出: True
print(is_palindrome("No 'x' in Nixon"))                # 输出: True

关键知识点:

  • char.isalnum():判断字符是否为字母或数字,过滤掉空格、标点等无关字符。
  • 列表推导式 + ''.join():快速生成过滤后的规范化字符串。

3. 底层实现版:双指针法(空间更高效)

如果要处理超长字符串,不想额外生成反转后的字符串副本,可以用双指针法,空间复杂度为O(1):

def is_palindrome(s: str) -> bool:
    normalized_s = s.lower()
    left = 0
    right = len(normalized_s) - 1
    
    while left < right:
        # 如果左边字符不相等,直接返回False
        if normalized_s[left] != normalized_s[right]:
            return False
        # 指针向中间移动
        left += 1
        right -= 1
    # 所有对称字符都匹配,返回True
    return True

逻辑说明:

  • 用两个指针分别从字符串的开头和结尾出发,逐个比较对应位置的字符。
  • 只要发现一对字符不匹配,立刻返回False;如果所有对称位置都匹配,最后返回True。
  • 这个方法不需要创建新字符串,内存占用更少,适合处理大文本。

总结

  • 日常快速开发选切片版,代码简洁易读。
  • 需要处理带标点/空格的字符串选增强过滤版。
  • 追求内存效率或学习底层逻辑选双指针版。

内容的提问来源于stack exchange,提问作者whitecat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:18:10