【lc】409最长回文串

发布时间 2023-08-25 10:45:35作者: BJFU-VTH

链接

https://leetcode.cn/problems/longest-palindrome/description/

分析

这题其实就是想让我们组成回文串。

回文串的特点:

1. 如果回文串长度为奇数,那么只有1个字符是奇数个,其余全是偶数个。

2. 如果回文串长度为偶数,那么全部字符都为偶数个。

所以,我们的问题转化成了,怎么从一堆字符里找到符合1,2条件的。

我们可以先找到全部的偶数字符,相加,然后再找到所有的奇数字符,把每个奇数字符的数量减去1(就变成了偶数)。

然后我们判断一下有没有经过奇数操作,没有经过的话,证明是情况2.如果经过了话,我们还要+1恢复其中1个奇数。

 

代码:

class Solution:
    def longestPalindrome(self, s: str) -> int:
        """
        先把个数读到dict里
        然后对偶数进行加和,同时对奇数-1进行加和
        奇数初始化为0(防止没有奇数的情况)
        :param s:
        :return:
        """
        mem = dict()
        res = 0
        flag = False
        for i in s:
            if i in mem:
                mem[i] += 1
            else:
                mem[i] = 1
        for k, v in mem.items():
            if v & 1 == 0:
                res += v
            else:
                res += v-1
                flag = True
        return res+1 if flag else res