np. „ccddcc” w ciągu „abaccddccefe”
Pomyślałem o rozwiązaniu, ale działa ono w czasie O (n ^ 2)
Algo 1:
Kroki: To metoda brutalnej siły
- Miej 2 pętle
for dla i = 1 do i mniej niż array.length -1
dla j = i + 1 do j mniej niż array.length - W ten sposób możesz uzyskać podciąg każdej możliwej kombinacji z tablicy
- Miej funkcję palindromową, która sprawdza, czy łańcuch jest palindromem
- więc dla każdego podciągu (i, j) wywołaj tę funkcję, jeśli jest to palindrom, zapisz ją w zmiennej łańcuchowej
- Jeśli znajdziesz następny podciąg palindromu i jeśli jest większy niż bieżący, zastąp go bieżącym.
- Wreszcie twoja zmienna łańcuchowa będzie miała odpowiedź
Problemy: 1. Ten algorytm działa w czasie O (n ^ 2).
Algo 2:
- Odwróć ciąg i zapisz go w innej tablicy
- Teraz znajdź największy pasujący podciąg między obiema tablicami
- Ale to też przebiega w czasie O (n ^ 2)
Czy możecie pomyśleć o algo, które działa w lepszym czasie. Jeśli to możliwe, czas O (n)
O(n^2)
pobranie podciągów *,O(n)
aby sprawdzić, czy są to palindromy, w sumieO(n^3)
?