【lc】409最长回文串
链接
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