可以使用哈希表(collections.Counter
)统计每个字符的出现次数,并计算可以用于构造回文串的最大长度。具体步骤如下:
- 统计字符串
s
中每个字符的出现次数。 - 对于每个字符,如果其出现次数为偶数,则可以全部使用。
- 如果出现次数为奇数,则最多使用
count - 1
个(即取最接近它的偶数)。 - 如果至少有一个字符的出现次数为奇数,则可以在回文中心放置一个字符,使得最终的长度 +1。
代码实现:
from collections import Counter
def longestPalindrome(s: str) -> int:
char_count = Counter(s)
length = 0
has_odd = False
for count in char_count.values():
if count % 2 == 0:
length += count
else:
length += count - 1
has_odd = True
return length + 1 if has_odd else length
# 测试
print(longestPalindrome("abccccdd")) # 输出: 7
print(longestPalindrome("Aa")) # 输出: 1
复杂度分析:
- 统计字符频率的
Counter(s)
需要 O(n) 时间。 - 遍历
char_count.values()
进行计算需要 O(1)(最多 52 个不同的字符)。 - 整体时间复杂度为 O(n),空间复杂度为 O(1)(因为字符集大小有限)。