Sobes.tech
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:

  1. Contar a quantidade de cada caractere.
  2. 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).
  3. 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;
}