python-leetcode-409. 最长回文串

409. 最长回文串 - 力扣(LeetCode)

可以使用哈希表(collections.Counter)统计每个字符的出现次数,并计算可以用于构造回文串的最大长度。具体步骤如下:

  1. 统计字符串 s 中每个字符的出现次数。
  2. 对于每个字符,如果其出现次数为偶数,则可以全部使用。
  3. 如果出现次数为奇数,则最多使用 count - 1 个(即取最接近它的偶数)。
  4. 如果至少有一个字符的出现次数为奇数,则可以在回文中心放置一个字符,使得最终的长度 +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)(因为字符集大小有限)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值