def is_palindrome(s: str) -> bool:
# 只保留字母和数字,并统一转为小写
cleaned = [ch.lower() for ch in s if ch.isalnum()]
return cleaned == cleaned[::-1]
# 测试用例
assert is_palindrome("A man, a plan, a canal: Panama") is True
assert is_palindrome("hello world") is False
assert is_palindrome("No 'x' in Nixon!") is True
函数先用 isalnum() 过滤掉空格和标点,再用 lower() 忽略大小写,最后比较列表与其反转是否相同。isalnum() 对中文等 Unicode 字符也有效,空字符串会返回 True。