Longest Substring Without Repeating Characters
Przeszukaj ciąg znaków w poszukiwaniu odcinków kolejnych znaków, w których każdy znak występuje tylko raz. W ciągu coddycode odcinek ycode zawiera pięć różnych znaków, a żaden dłuższy odcinek nie unika powtórzeń, więc odpowiedź to 5.
Sprawdzenie każdego możliwego odcinka działa, ale jest powolne. Szybsza metoda utrzymuje okno między dwiema pozycjami, w którym nigdy nie ma powtórzeń. Przesuwaj prawą krawędź o jeden znak naraz. Gdy nowy znak już znajduje się w oknie, przesuń lewą krawędź tuż za miejsce, w którym ten znak pojawił się wcześniej. Zapamiętanie ostatniej pozycji każdego znaku sprawia, że to przesunięcie jest natychmiastowe, więc ciąg jest odczytywany tylko raz.
Napisz funkcję o nazwie lengthOfLongestSubstring, która przyjmuje ciąg znaków s i zwraca długość najdłuższego podciągu (ciągu kolejnych znaków), w którym żaden znak nie występuje więcej niż raz.
Wielkie i małe litery to różne znaki, więc a i A nie są powtórzeniami.
Ograniczenia: 1 <= s.length <= 5 * 10^4. s zawiera wyłącznie angielskie litery (małe i wielkie) oraz cyfry.
Funkcja
- arg1string
- Zwracainteger
Przykłady
- Wejście
- arg1 = "coddycode"
- Wyjście
- 5
- Wejście
- arg1 = "racecar"
- Wyjście
- 4
- Wejście
- arg1 = "a1b2a3b"
- Wyjście
- 5
+12 ukrytych testów przy wysłaniu
Podpowiedzi
Otwieraj je po kolei. Każda zdradza trochę więcej.
Podciąg to jeden ciągły fragment tekstu, więc szukasz najdłuższego fragmentu, który możesz pokonać bez napotkania dwa razy tego samego znaku.
Utrzymuj okno z lewą i prawą krawędzią. Powiększaj je od prawej strony o jeden znak naraz, a lewą krawędź przesuwaj tylko wtedy, gdy nowy znak znajduje się już w oknie.
Przechowuj ostatni indeks, pod którym pojawił się każdy znak. Jeśli nowy znak był ostatnio widziany na indeksie równym lewej krawędzi lub większym, przesuń lewą krawędź na pozycję o jeden większą niż ten indeks. Lewa krawędź nigdy nie przesuwa się wstecz, a odpowiedzią jest najszersze okno, jakie kiedykolwiek uzyskano.
Pełne omówienie tego zadania pojawi się wkrótce.
Podobne zadania
Zadania oparte na tych samych pomysłach. Rozwiązanie dwóch lub trzech utrwala schemat.
Python
def lengthOfLongestSubstring(s):
# Wpisz tutaj kodPrzypadek 1
Przypadek 2
Przypadek 3
Wejście
arg1 = "coddycode"
Oczekiwane
5