Sobes.tech
Senior

За дат низ, потребно је одредити дужину највећег палиндрома који се може саставити од његових карактера. Палиндром је реч која се чита исто са почетка и са краја, на пример "карак" или "ротор". Пример: Улаз: aaabbbcccddd Излаз: 11 (палиндром dccbbaaabbccd)

sobes.tech АИ

Одговор од АИ

Чтобы найти длину самого большого палиндрома, который можно составить из символов строки, нужно учитывать, что палиндром симметричен, и в центре может быть только один символ с нечетной частотой.

Алгоритм:

  1. Подсчитать количество каждого символа.
  2. Для каждого символа добавить в длину палиндрома максимально четное количество его вхождений (например, если символ встречается 5 раз, добавить 4).
  3. Если есть хотя бы один символ с нечетным количеством, добавить 1 (центральный символ).

Пример на Java:

public int longestPalindromeLength(String s) {
    int[] counts = new int[128]; // для ASCII
    for (char c : s.toCharArray()) {
        counts[c]++;
    }
    int length = 0;
    boolean oddFound = false;
    for (int count : counts) {
        length += (count / 2) * 2; // добавляем четное количество
        if (count % 2 == 1) {
            oddFound = true;
        }
    }
    if (oddFound) {
        length += 1; // центральный символ
    }
    return length;
}