1
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:使用python的reverse方法反转字符,判断反转后和现在一致
1.
y = list(str(x))
y.reverse()
y == list(str(x))
2.
int(str(x)[::-1]) == x
3. 使用双端队列
from collections import deque
q = deque(str(x))
flag = True
while len(q) > 1 and flag:
left = q.popleft()
right = q.pop()
if left != right:
flag = False
return flag
4. 折中计算
2
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:回文数字符存在个数为奇数不大于1
class Solution(object):
def canPermutePalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
dic = dict()
for ch in s:
if ch in dic:
dic[ch] += 1
else:
dic[ch] = 1
flag = 0
# print dic
for v in dic.values():
if v % 2 != 0:
flag += 1
return flag <= 1
3
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:先全部偶数构造,然后有奇数+1
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: int
"""
dic = dict()
for ch in s:
if ch in dic:
dic[ch] += 1
else:
dic[ch] = 1
sum = 0
flag = 0
# print dic
for v in dic.values():
print v
sum += v
if v%2 :
sum -= 1
flag = 1
if flag:
sum += 1
return sum
网友评论