leetcode 409.最长回文串

原题:

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。

解题思路:

采用Counter计数器,观察回文串的规律

需要满足几个条件:

①偶数个数的一类相同字母完全满足条件

②奇数个数的一类相同字母去偶数个,剩下的一个需要进行条件判断,看是否需要+1,一旦max_nums mod 2 == 0 and value % 2 == 1 ,这说明之前已经
有一个奇数字母存在了,就需要max_nums + 1

注意:回文字符串中必须最多1个奇数的字母存在

** 代码:**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def longestPalindrome(self, s: str) -> int:
from collections import Counter
result = Counter(s)
# 用来记录总长度
max_nums = 0
# 用来为长度大于2且长度为奇数,需要+1
odd = 0
for value in result.values():
max_nums += value//2*2
# 利用0%2==0的一个特性,来使得包含只有一个字符的字母满足要求或长度大于2且长度为奇数的字母满足要求
if max_nums%2 ==0 and value % 2 == 1:
max_nums += 1
return max_nums

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!