---
# System prepended metadata

title: 409. Longest Palindrome

---

# 409. Longest Palindrome
# # Tóm tắt đề bài

Cho một chuỗi s chứa các chữ cái tiếng Anh, trả về độ dài của chuỗi palindrome lớn nhất tạo ra từ các kí tự trong chuỗi s đó.

### Giới hạn
- 1 <= s.length <= 2000

## Lời giải
- Có 2 loại chuỗi palindrome: độ dài chẵn hoặc lẻ.
- Sử dụng HashMap để đếm số lần xuất hiện của từng kí tự trong chuỗi s.
- Nếu đếm đến số chẵn lần xuất hiện của kí tự đó, ta thêm 2 vào kết quả trả về (vì 1 chuỗi palindrome bất kì có thể thêm 2 kí tự giống hệt nhau, 1 vào đầu và 1 vào cuối và nó vẫn là chuỗi palindrome)
- Nếu như có bất kì kí tự nào có lẻ lần xuất hiện => thêm 1 vào kết quả trả về (vì chuỗi palindrome độ dài lẻ chấp nhận kí tự ở chính giữa có lẻ lần xuất hiện).


### Độ phức tạp thuật toán

Thời gian: $O(N)$
Bộ nhớ: $O(N)$ 

### Code tham khảo
```c++
class Solution:
    def longestPalindrome(self, s: str) -> int:
        cnt = defaultdict(int)
        res = 0

        for c in s:
            cnt[c] += 1
            if cnt[c] % 2 == 0:
                res += 2

        for count in cnt.values():
            if count % 2:
                res += 1
                break

        return res
```