📅  最后修改于: 2023-12-03 15:40:36.425000             🧑  作者: Mango
在编写程序时,经常会遇到需要检查一个字符串是否是回文奇数的情况。回文奇数是指正着念和倒着念都一样的数字,且是奇数。比如131、767都是回文奇数,而121、5555不是。
为了解决这个问题,我们可以使用两种方法:一种是将字符串反转后进行比较,另一种是利用双指针从字符串两端向中间比较。这里我们将介绍这两种方法的具体实现。
首先,将字符串反转后和原字符串进行比较。如果相等,再判断字符串长度是否为奇数。如果是奇数,则返回true,否则返回false。示例代码如下:
def is_palindrome(s: str) -> bool:
return s == s[::-1] and len(s) % 2 == 1
使用示例:
s = "12321"
print(is_palindrome(s)) # True
s = "123456"
print(is_palindrome(s)) # False
另一种方法是利用双指针,从字符串两端开始向中间比较。当指针相遇时,如果字符串长度为奇数,则返回True,否则返回False。示例代码如下:
def is_palindrome(s: str) -> bool:
left, right = 0, len(s) - 1
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return len(s) % 2 == 1
使用示例:
s = "12321"
print(is_palindrome(s)) # True
s = "123456"
print(is_palindrome(s)) # False
以上两种方法都可以有效地判断一个字符串是否是回文奇数。具体使用哪种方法,可以根据使用场景和性能需求进行选择。