题目
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
思路
因为是回文字符串,所以里面出现的字符都是偶数个,比如abba,除了最中间的1个是奇数个,例如accbcca。那么我们可以使用字符-'A’得到的整数来存储在数组的key,value为该字母出现的次数,出现为偶数,则回文字符串中就的该字母个数就+2。最后对比长度,若有奇数的字母,就+1。
show me the code
func longestPalindrome(s string) int {
var list [58]int//'z'-'A'=57所以需要58
res := 0
for _,v := range s {
list[v-'A']++
if list[v-'A']&1==0 {
res += 2
}
}
if len(s)>res {
res += 1
}
return res
}
总结
经过前几天每天1题的打卡后,感觉题目分析起来越来越清楚了。Fake it, till you make it.