📌  相关文章
📜  教资会网络 | NTA UGC NET 2019 年 6 月 – II |问题 5(1)

📅  最后修改于: 2023-12-03 14:54:48.245000             🧑  作者: Mango

NTA UGC NET 2019 年 6 月 – II

问题 5
题目描述

给定一个字符串 s,确定它是否是回文。只考虑字母和数字字符,忽略大小写。例如, "A man, a plan, a canal: Panama" 是回文字符串,而 "race a car" 不是回文字符串。

函数签名:

def is_palindrome(s: str) -> bool:
    pass
示例
assert is_palindrome("A man, a plan, a canal: Panama")    # True
assert not is_palindrome("race a car")                   # False

该程序员面试题涉及字符串处理技巧,需要比较输入字符串是否为回文字符串,忽略字母大小写,只考虑数字与字母字符。该问题可以使用 Python 语言实现。

首先将字符串所有字符转换为小写,并仅保留数字与字母字符,移除其它字符。之后,使用双指针技巧从两端开始扫描字符串,比较对应字符是否相等。如果不存在不相等的情况,则表示该字符串为回文字符串。

def is_palindrome(s: str) -> bool:
    # 将字符串全部转换为小写并过滤掉非数字或字母字符
    s = ''.join(e.lower() for e in s if e.isalnum())
    # 使用双指针扫描字符串
    left, right = 0, len(s) - 1
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1
        right -= 1
    return True

以上代码片段中,将字符串中字符转换为小写并过滤掉非数字或字母字符使用了列表推导式。在循环过程中,使用了双指针扫描字符串,left 指向字符串的首部,right 指向字符串的尾部。若字符串中存在任意不相等的情况,则退出循环并返回 False。否则表示字符串为回文字符串,返回 True。该函数的返回类型为布尔型 (bool)。代码片段中的注释描述完整,满足代码规范,可读性好,易于维护。

返回的代码片段如下所示:

def is_palindrome(s: str) -> bool:
    """
    判断字符串是否为回文字符串,忽略字母大小写,只考虑数字与字母字符。
    Args:
        s: 待判断的字符串。
    Returns:
        若字符串为回文字符串,则返回 True;否则返回 False。
    """
    # 将字符串全部转换为小写并过滤掉非数字或字母字符
    s = ''.join(e.lower() for e in s if e.isalnum())
    # 使用双指针扫描字符串
    left, right = 0, len(s) - 1
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1
        right -= 1
    return True