033. 编写一个函数,检查一个字符串是否是回文
在 Python 中,可以通过多种方式检查一个字符串是否是回文。回文是指一个字符串正读和反读都相同,例如 "racecar" 和 "level"。
示例代码
def is_palindrome(s):
"""
检查一个字符串是否是回文。
参数:
s (str): 要检查的字符串。
返回:
bool: 如果字符串是回文,返回 True;否则返回 False。
"""
# 将字符串转换为小写并去除非字母字符
cleaned_s = ''.join(char.lower() for char in s if char.isalnum())
# 检查字符串是否等于其反转
return cleaned_s == cleaned_s[::-1]
# 测试代码
test_strings = ["racecar", "hello", "A man, a plan, a canal, Panama", "No lemon, no melon"]
for test in test_strings:
print(f"'{test}' 是回文吗? {is_palindrome(test)}")
运行结果
运行上述代码后,输出如下:
'racecar' 是回文吗? True
'hello' 是回文吗? False
'A man, a plan, a canal, Panama' 是回文吗? True
'No lemon, no melon' 是回文吗? True
代码解释
清理字符串:
-
使用列表推导式和
isalnum()
方法去除字符串中的非字母数字字符。 -
使用
lower()
方法将所有字符转换为小写,以确保检查时忽略大小写。
检查回文:
-
使用切片操作
cleaned_s[::-1]
反转字符串。 -
比较原始字符串和反转后的字符串是否相同。
扩展:其他方法
方法 2:使用双指针
可以通过双指针方法从字符串的两端向中间移动,逐个比较字符是否相同。
def is_palindrome(s):
"""
检查一个字符串是否是回文。
参数:
s (str): 要检查的字符串。
返回:
bool: 如果字符串是回文,返回 True;否则返回 False。
"""
# 将字符串转换为小写并去除非字母字符
cleaned_s = ''.join(char.lower() for char in s if char.isalnum())
# 使用双指针方法检查回文
left, right = 0, len(cleaned_s) - 1
while left < right:
if cleaned_s[left] != cleaned_s[right]:
return False
left += 1
right -= 1
return True
# 测试代码
test_strings = ["racecar", "hello", "A man, a plan, a canal, Panama", "No lemon, no melon"]
for test in test_strings:
print(f"'{test}' 是回文吗? {is_palindrome(test)}")
注意事项
- 忽略非字母数字字符:在检查回文时,通常忽略标点符号、空格和大小写。因此,需要先清理字符串。
- 效率: 切片操作和双指针方法的时间复杂度都是 O(n),其中 n 是字符串的长度。
- 适用场景: 如果字符串很长,双指针方法可能更高效,因为它不需要额外的字符串反转操作。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)