Leetcode Note: Go - Longest Palindrome
Longest Palindrome - LeetCode
https://leetcode.com/problems/longest-palindrome/
- Go 言語で取り組んだメモ
所感
- string s が渡されるので、渡された文字列で作成可能な最長の回分文字数を int で return する
- 例: s = abccccdd なら dccaccd が最長回文であり文字数は 7 なので 7 を return する
回答
Longest Palindrome - LeetCode
https://leetcode.com/problems/longest-palindrome/solution/
func longestPalindrome(s string) int {
count := [128]int{}
for _, v := range s {
count[v]++
}
answer := 0
for _, v := range count {
answer += v / 2 * 2
if answer%2 == 0 && v%2 == 1 {
answer++
}
}
return answer
}
- count 配列で文字が何度登場したのかをカウント
- count 配列をループ
answer += v / 2 * 2
でパートナーになれる可能性がある数値を産出- “aaaaa” という文字列があれば 5 / 2 * 2 = 4 で 4 文字がパートナーにとして成立する可能性がある
if answer%2 == 0 && v%2 == 1
v%2 == 1
はセンター文字列の候補チェックanswer%2 == 0
はセンター文字列を既に追加していないかチェック- センター文字列を answer に追加していれば answer は常に奇数になるため