python回文数的两种解法 详细解析
时间: 2024-12-29 19:34:51 浏览: 39
在Python中,判断一个数是否是回文数,即正读和反读都一样的数字,有多种方法可以实现。以下是两种常见的解法:
方法一:字符串反转比较
- 将输入的整数转换成字符串(str()函数),这样可以直接看到原数和其反转后的样子。
- 比较字符串和它的反转是否相等,如果相等,则该数是回文数。
def is_palindrome_num(num):
str_num = str(num)
return str_num == str_num[::-1]
方法二:逐位遍历比较
- 使用两个指针,一个从前往后遍历(i),另一个从后往前遍历(j,初始值为len(str_num) - 1)。
- 对应的字符比较,如果两个指针指向的字符不相等,返回False;当两个指针相遇或者超过范围,说明是回文数,返回True。
def is_palindrome_num(num):
str_num = str(num)
left, right = 0, len(str_num) - 1
while left < right:
if str_num[left] != str_num[right]:
return False
left += 1
right -= 1
return True
相关问题
leetcode5. 最长回文子串python
LeetCode 第 5 题 '最长回文子串' 的 Python 解法
对于给定字符串 s
,返回其中的最长回文子串是一个经典算法问题。一种高效的解决方案是利用中心扩展方法来寻找可能的最大长度回文。
中心扩展法解析
该方法基于观察到的一个事实:一个回文串可以由中间向两端不断扩散而得。因此可以从每一个字符位置出发尝试构建尽可能大的回文序列[^1]。
具体来说:
- 对于每个字符作为单个字符的中心点;
- 或者两个相同相邻字符作为一个整体中心点;
- 向两侧延伸直到遇到不匹配的情况为止;
记录下每次找到的有效回文串及其起始索引和结束索引,并更新全局最优解。
下面是具体的 Python 实现代码:
def longest_palindrome(s: str) -> str:
if not s or len(s) == 0:
return ""
start, end = 0, 0
for i in range(len(s)):
len1 = expand_around_center(s, i, i)
len2 = expand_around_center(s, i, i + 1)
max_len = max(len1, len2)
if max_len > end - start:
start = i - (max_len - 1) // 2
end = i + max_len // 2
return s[start:end + 1]
def expand_around_center(s: str, left: int, right: int) -> int:
L, R = left, right
while L >= 0 and R < len(s) and s[L] == s[R]:
L -= 1
R += 1
return R - L - 1
此函数通过遍历整个输入字符串并调用辅助函数 expand_around_center()
来计算以当前位置为中心能够形成的最长回文串长度。最终得到的结果即为所求的最大回文子串。
相关推荐

















