回文(easy)

2020-12-29  本文已影响0人  warManHy

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
上一篇 下一篇

猜你喜欢

热点阅读