Senior
Para uma string dada, é necessário determinar o comprimento do maior palíndromo que pode ser formado a partir dos seus caracteres. Um palíndromo é uma palavra que é lida da mesma forma de trás para frente, por exemplo "arara" ou "rever". Exemplo: Entrada: aaabbbcccddd Saída: 11 (palíndromo dccbbaaabbccd)
sobes.tech IA
Resposta da IA
Para encontrar o comprimento do maior palíndromo que pode ser formado a partir dos caracteres de uma string, deve-se considerar que o palíndromo é simétrico e que no centro pode haver apenas um caractere com frequência ímpar.
Algoritmo:
- Contar a quantidade de cada caractere.
- Para cada caractere, adicionar ao comprimento do palíndromo a quantidade máxima par de suas ocorrências (por exemplo, se um caractere aparece 5 vezes, adicionar 4).
- Se houver pelo menos um caractere com quantidade ímpar, adicionar 1 (caractere central).
Exemplo em Java:
public int longestPalindromeLength(String s) {
int[] counts = new int[128]; // para ASCII
for (char c : s.toCharArray()) {
counts[c]++;
}
int length = 0;
boolean oddFound = false;
for (int count : counts) {
length += (count / 2) * 2; // adiciona quantidade par
if (count % 2 == 1) {
oddFound = true;
}
}
if (oddFound) {
length += 1; // caractere central
}
return length;
}