1
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:
def isPalindrome(self, x: int) -> bool:
s = str(x) # 将整形转换成字符串
s2 = s[: : -1] # 利用切片将字符串逆序
if s == s2:
return True
else:
return False
题目给我提了新的要求,不将数字转换为字符串。好!
于是将数字存入列表中,不知道题目的本意是不是这样。
class Solution:
def isPalindrome(self, x: int) -> bool:
if x >= 0: # 如果是负数则肯定不是回文数
list_num = []
# 将数字倒过来存入列表
while x != 0:
list_num.append(x%10)
x //= 10
list_num2 = list_num[::-1] # 将列表逆转
if list_num == list_num2:
return True
return False
return False
2
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
# dist[i][j]=1表示下标i到j的字符串是回文串
dist = [[0]*n for i in range(n)] # 生成一个全为0的二维数组
len_max = 0 # 最长回文串长度
str_max = "" # 长度最长的回文串
for j in range(n):
for i in range(j+1):
# 当s[i]=s[j]时,若dist[i+1][j-1]=1或者字符串长度小于等于3,则dist[i][j]=1
if s[i] == s[j] and (j-i <= 2 or dist[i+1][j-1]):
dist[i][j] = 1
# 当此回文串长度大于先前最长回文串时
if j-i+1 > len_max:
len_max = j-i+1
str_max = s[i:j+1]
return str_max