leetcode 409. 最长回文字符串
题目描述
给定一个字符串,问其中的字符最多能组成多长的回文字符串?
Example:
Input:
"abccccdd"
Output:
7
解释:
其中一个最长回文字符串是 "dccaccd", 其长度为 7.
```
# -*- coding: utf-8 -*-
# @Time : 2019-10-11 10:56
# @Author : Jayce Wong
# @ProjectName : job
# @FileName : longestPalindrome.py
# @Blog : https://sysujayce.github.io/
# @Github : https://github.com/SysuJayce
class Solution:
"""
给定一个字符串,问其中的字符最多能组成多长的回文字符串?
其实我们可以这样想,所谓的回文字符串,就是从左到右和从右到左的遍历是一样的,那么就是说,
每个字符都需要出现偶数次,当然,如果是奇数长度的回文字符串,其中间的字符可以是只出现了一次。
也就是说,我们只需要判断给定的字符串中各个字符的出现次数,把偶数次的字符挑出来,然后从奇数次的
字符中找一个(如果存在出现次数为奇数的字符的话),这些字符就能组成最长的回文字符串。
"""
def longestPalindrome(self, s: str) -> int:
from collections import Counter
# 找出所有奇数次的字符
odds = sum(v & 1 for v in Counter(s).values())
# 先把奇数次的字符去掉,然后从中找一个(如果有)
return len(s) - odds + bool(odds)
```
- 原文作者:Jayce
- 原文链接:https://sysujayce.github.io/posts/longestpalindrome/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。