📌  相关文章
📜  国际空间研究组织 | ISRO CS 2015 |问题 57(1)

📅  最后修改于: 2023-12-03 15:37:15.333000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2015 | 问题 57
题目描述

给定一个字符串,编写一个函数来检查它是否是回文。一个回文是一个字符串,它的正反两侧都是一样的。

例子:

输入: "racecar"

输出: true

输入: "hello"

输出: false

示例代码
def isPalindrome(s: str) -> bool:
    # 先将字符全部转换成小写
    s = s.lower()
    # 指针i、j分别指向字符串首尾
    i, j = 0, len(s) - 1
    while i < j:
        # 若指针i指向非字母字符,则向后移动一位
        if not s[i].isalnum():
            i += 1
            continue
        # 若指针j指向非字母字符,则向前移动一位
        if not s[j].isalnum():
            j -= 1
            continue
        # 若指针i、j所指向的字符不相同,则返回False
        if s[i] != s[j]:
            return False
        # 指针i、j继续向中间移动
        i += 1
        j -= 1
    # 若所有字符都被判断完毕,返回True
    return True
代码说明

该函数的主要思路是使用双指针扫描字符串,每次比较指针所指向的字符是否相同,若不同则返回False。在比较之前,为了避免大小写的干扰,我们将全部字符转化成小写。在比较字符之前,还需要判断其是否为字母或数字,若不是则需要向前或向后移动指针。最终,若双指针扫描完全后两端的字符均相同,则为回文,返回True。