| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- package main
- func Reverse(s string) string {
- bytes := []byte(s) // 直接转为字节切片
- for i, j := 0, len(bytes)-1; i < j; i, j = i+1, j-1 {
- bytes[i], bytes[j] = bytes[j], bytes[i] // 交换字节
- }
- return string(bytes)
- }
- func longestPalindrome(words []string) int {
- m := make(map[string]int)
- res, center := 0, 0
- for _, word := range words {
- m[word]++
- }
- for word := range m {
- if m[word] == 0 {
- continue
- }
- reversed := Reverse(word)
- if reversed == word {
- pairs := m[word] / 2
- res += pairs * 2 * 2
- if m[word]%2 == 1 {
- center = 2
- }
- } else {
- if m[reversed] >= 1 {
- pairs := min(m[word], m[reversed])
- res += pairs * 4
- m[word] -= pairs
- m[reversed] -= pairs
- }
- }
- }
- return res + center
- }
|