Senior
Pentru un șir dat se dă, trebuie determinată lungimea celui mai mare palindrom care poate fi format din caracterele sale. Un palindrom este un cuvânt care se citește la fel de la început și de la sfârșit, de exemplu "rotor" sau "reper". Exemplu: Intrare: aaabbbcccddd Ieșire: 11 (palindrom dccbbaaabbccd)
sobes.tech AI
Răspuns de la AI
Pentru a găsi lungimea celui mai mare palindrom care poate fi format din caracterele unui șir, trebuie să ținem cont de faptul că palindromul este simetric și că în centru poate fi doar un singur caracter cu frecvență impară.
Algoritm:
- Numărați de câte ori apare fiecare caracter.
- Pentru fiecare caracter, adăugați la lungimea palindromului numărul maxim par de apariții ale sale (de exemplu, dacă un caracter apare de 5 ori, adăugați 4).
- Dacă există cel puțin un caracter cu un număr impar, adăugați 1 (caracterul central).
Exemplu în Java:
public int longestPalindromeLength(String s) {
int[] counts = new int[128]; // pentru ASCII
for (char c : s.toCharArray()) {
counts[c]++;
}
int length = 0;
boolean oddFound = false;
for (int count : counts) {
length += (count / 2) * 2; // adaugă numărul par
if (count % 2 == 1) {
oddFound = true;
}
}
if (oddFound) {
length += 1; // caracterul central
}
return length;
}