Python程序:检查字符串是否对称或回文
更多Python相关文章,请阅读:Python 教程
前言
在日常的字符串处理中,需要判断一个字符串是否对称或回文。对称即字符串的前半部分与后半部分反转后完全一致;回文即正读与倒读一致。Python语言提供了多种方法检查字符串是否对称或回文。本文将简要介绍其中比较实用的几种。
方法一:反转后比较
这是最简单的方法。将字符串反转后,与原字符串进行比较。如果一致,则该字符串为对称或回文;否则,不是。
def reverse_str(s):
return s[::-1]
def is_symmetric(s):
if s == reverse_str(s):
return True
return False
如字符串 “level”,反转后为 “level”,与原字符串对称,是一个回文字符串。
s = 'level'
print(is_symmetric(s)) # True
方法二:左右比较
这种方法在不使用Python字符串的反转功能时,可以采用。将字符串的左半部分与右半部分进行比较。当字符串长度为偶数时,直接比较左右两部分;当长度为奇数时,比较左半部分与右半部分去掉中心字符的结果。
def is_symmetric(s):
n = len(s)
if n % 2 == 0:
left_half = s[:n // 2]
right_half = reverse_str(s[n // 2:])
else:
left_half = s[:n // 2]
right_half = reverse_str(s[(n // 2) + 1:])
if left_half == right_half:
return True
return False
如字符串 “noon”,左半部分为 “no”,右半部分为 “on”,二者反转后相等,证明该字符串为对称或回文。
s = 'noon'
print(is_symmetric(s)) # True
方法三:递归比较
这种方法采用递归的方式,比较字符串第一个字符与最后一个字符是否相等;相等的话,递归比较去掉这两个字符的字符串是否对称或回文;否则,该字符串不是对称或回文。
def is_symmetric(s):
if len(s) == 1:
return True
if s[0] == s[-1]:
return is_symmetric(s[1:-1])
return False
如字符串 “racecar”,去掉首尾后为 “aceca”,二者再去掉首尾后为 “cec”,反转为 “cec”,证明该字符串为对称或回文。
s = 'racecar'
print(is_symmetric(s)) # True
方法四:切片比较
在Python3中,字符串提供了字符串切片的功能。可以先将字符串倒序,然后和原字符串进行切片比较。
def is_symmetric(s):
if s == s[::-1]:
return True
return False
如字符串 “civic”,反转后为 “civic”,与原字符串完全一致,是一个回文字符串。
s = 'civic'
print(is_symmetric(s)) # True
结论
本文介绍了Python语言判断字符串是否对称或回文的多种方法。其中,反转后比较是最简单的;左右比较需要考虑字符串长度奇偶性;递归比较比较灵活;切片比较则更为简单明了。根据实际需要,适当选择方法,可以提高代码的运行效率,为字符串处理带来便捷。
极客笔记