Senior
Adott egy sztring, meg kell határozni a leghosszabb palindróm hosszát, amit a karaktereiből lehet alkotni. A palindróm olyan szó, amit ugyanúgy olvasunk balról jobbra és jobbról balra, például "kek" vagy "kerek". Példa: Bemenet: aaabbbcccddd Kimenet: 11 (palindróm dccbbaaabbccd)
sobes.tech MI
Válasz az MI-től
Чтобы найти длину самого большого палиндрома, который можно составить из символов строки, нужно учитывать, что палиндром симметричен, и в центре может быть только один символ с нечетной частотой.
Алгоритм:
- Подсчитать количество каждого символа.
- Для каждого символа добавить в длину палиндрома максимально четное количество его вхождений (например, если символ встречается 5 раз, добавить 4).
- Если есть хотя бы один символ с нечетным количеством, добавить 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;
}