今天又是阴天,不过阴天凉快,我喜欢。
第78天——第78题(最长回文串)
看题目!
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
python解答:
class Solution:def longestPalindrome(self, s: str) -> int:count=collections.Counter(s)center=0res=0for i in count:if count[i] % 2:center=1res+=count[i]-1else:res+=count[i]return res+center
答案解析:
1.collections.Counter()
2.组回文字符串的过程,其实我们可以看作是从一个中心往旁边对称放字符的过程。
首先我们先把给的字符串统计词频
(1)对于所有的出现偶数次的字符,那么其实在组回文字符串的时候就是可以看作直接放置在中心两侧,因此有多少就直接加上去多少就好了。
(2)对于所有的出现奇数次的字符,那么实际上我们就可以看作是1 + 偶数次,偶数次统统可以加上去,剩下的都是单个的不同的字符,选一个作为中心就好了。
要注意的是,如果给的字符串的字符频次全是偶数次,那么肯定中心就不会是一个单一的字符,所以要加一个判断,如果出现了有字符是奇数次那么就+1,否则对于全是偶数次的字符,就不需要加1了
作者:Da_bo_luo
链接:力扣
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。