Najdłuższy wspólny podnapis
Treść zadania
Otrzymujesz dwa napisy A i B. Znajdź ich najdłuższy wspólny podnapis, czyli najdłuższy ciągły fragment, który występuje zarówno w A, jak i w B.
- Jeśli kilka różnych podnapisów ma tę samą, maksymalną długość — wypisz ten, który w napisie
Azaczyna się najwcześniej. - Jeśli napisy nie mają ani jednego wspólnego znaku — wypisz pustą linię.
Dane wejściowe
- 1. linia: napis
A - 2. linia: napis
B
Dane wyjściowe
Jedna linia: najdłuższy wspólny podnapis albo pusta linia.
Ograniczenia
1 ≤ |A|, |B| ≤ 1000
Uwagi
- Programowanie dynamiczne: niech
d[i][j]oznacza długość najdłuższego wspólnego fragmentu kończącego się na znakachA[i - 1]iB[j - 1]. Jeśli te znaki są równe,d[i][j] = d[i - 1][j - 1] + 1, w przeciwnym razie0. Największa wartość w tablicy to długość wyniku. Czas $O(|A| \cdot |B|)$.
Przykłady
ijkabcdl xxxxabcd
abcd
xyab abxy
xy
Oba podnapisy xy i ab mają długość 2; w A wcześniej zaczyna się xy.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 25
Trudniejsze zadania na napisach: samodzielna zamiana i usuwanie fragmentów, przedrostki, kodowanie RLE, rotacje, szukanie najdłuższych powtórzeń i wspólnych fragmentów (programowanie dynamiczne) oraz sprawdzanie nawiasów za pomocą stosu. Spróbuj rozwiązywać je własnymi pętlami, bez gotowych metod w rodzaju replace czy startswith — właśnie o to w nich chodzi.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- Program nie wypisuje komunikatów typu „Podaj napis:”. Tekst podany w
input("…")jest ignorowany przez sprawdzarkę. - Każdy napis zajmuje jedną całą linię wejścia, razem ze spacjami — wczytuj go przez
input(), bezstrip()isplit(). - Wielkość liter ma znaczenie (
Aiato różne znaki), a spacja też jest znakiem. - Podnapis to ciągły fragment napisu, np.
kotjest podnapisemkotlet, aket— nie. - Pozycje znaków (indeksy) liczymy od
0, tak jak w Pythonie. - Odpowiedzi logiczne wypisuj jako
PrawdaalboFałsz(o ile zadanie nie mówi inaczej).
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomionoabcXYZ XYZabc
abc
Test 2
Nie uruchomionohello yellow
ello
Test 3
Nie uruchomionoabc xyz
(brak)
Test 4
Nie uruchomionoaaaa aa
aa
Test 5
Nie uruchomionokot kot
kot
Test 6
Nie uruchomionopqrsXYZabc abc-XYZ-pqr
pqr
Test 7
Nie uruchomionoABC abc
(brak)
Test 8
Nie uruchomionoabc cde
c
Test 9
Nie uruchomionoabcccccccbcaaaccccaccbbccabaabbbabcabbaaccbcccbccacaabbcabacacaacabccabccbbbabcbbccacacccbaccaccaacbaacbacbcbaaacacabcaaabcaabbacabcbaababaacabcbaabaacbabcbaaacbaabbcbccaacacacbbbbbabbbbbabbaacbcccbaccbaacccacaabbaccbbaabbccaabcaabcccacaacbacccccbcccababccacabbbaccacbababbababbbcaabcbbcbcbaacaccccbaccaccbcacacbababbcbaacbbccccbbbabcccccbbbaaacbbaabccccbaccabbcabcbccabcbabaacacbaababaababaacabccbbaabcabccbacbabccbabbbaacbccbbbabaabaacccaccacbabcabcabbbcacabcaabbccbabccbaaccacaabbbbcabbbbcabcbaacb cbcccaababccacbccbcabcaccbbacccccabbcbaccbcabacbaabcccaabcaabababbbacbbccabacccbaaacbbbabbaaacaaaacaaabaabccbbbacaccaaccacbbccbcbaababcbbaccaaacaacbaacbcbcbbaccabcbcaaacccacabacaccbbbbabbbcbcaccaababcbabcccacababacbcbbaababacbcaaaaabababaccbccbbcccaabbbabbbabbaabaacaccbbababbbababbbbbaccaaacabaccabcabcccacaabbabababcbcacbcbacbbbbacaaabbaccbaccbbaacbcbacccccaaabccaabaabbaabccbccacaabcbbbababcbcccccacaaabcabbccabacbabccbaacacabbbcbccbcbaaccacaacabaabbbbabacacacccacbbcabacbabacbaaabcbcabcbababaacab
ccbccacaab