从Leetcode 每日一题练习继续讨论:
409. 最长回文串
409. Longest Palindrome
题解
本题也是一道简单题, 最近几天的每日一题都比较简单, 因为是能组成的最长回文串, 与顺序无关, 因此只需统计字母个数即可. 遍历字符串并统计字母, 每当同一个字母有两个时就将结果加2并将字母个数重置为0. 遍历一遍后如果仍有字母剩余1个,则将结果加1表示奇数长度的回文串在中间添加的字母.
先统计全部字母的数量再最终求和会快一些, 减少了不必要的判断和加法操作.
代码
func longestPalindrome(s string) int {
charslice := make([]int,52)
for i,_ := range s{
if s[i] >= 'a'{
charslice[s[i]-'a']++
}else{
charslice[26+s[i]-'A']++
}
}
result := 0
odd := 0
for _,num := range charslice{
if num % 2 == 0{
result += num
}else{
result += num - 1
odd = 1
}
}
return result + odd
}