Longest Substring Without Repeating Characters
Durchsuche eine Zeichenfolge nach Abschnitten aufeinanderfolgender Zeichen, in denen jedes Zeichen nur einmal vorkommt. In coddycode hat der Abschnitt ycode fünf verschiedene Zeichen, und kein längerer Abschnitt kommt ohne Wiederholung aus, daher lautet die Antwort 5.
Jeden möglichen Abschnitt zu überprüfen funktioniert, ist aber langsam. Eine schnellere Methode hält ein Fenster zwischen zwei Positionen, in dem es nie Wiederholungen gibt. Verschiebe den rechten Rand jeweils um ein Zeichen. Wenn das neue Zeichen bereits im Fenster ist, springe mit dem linken Rand direkt hinter die Stelle, an der dieses Zeichen zuvor gesehen wurde. Wenn du dir die letzte Position jedes Zeichens merkst, erfolgt dieser Sprung sofort, sodass die Zeichenfolge nur einmal durchlaufen wird.
Schreibe eine Funktion namens lengthOfLongestSubstring, die einen String s entgegennimmt und die Länge des längsten Teilstrings (einer Folge aufeinanderfolgender Zeichen) zurückgibt, in dem kein Zeichen mehr als einmal vorkommt.
Groß- und Kleinbuchstaben sind unterschiedliche Zeichen, daher sind a und A keine Wiederholung.
Einschränkungen: 1 <= s.length <= 5 * 10^4. s enthält nur englische Buchstaben (Groß- und Kleinbuchstaben) und Ziffern.
Funktion
- arg1string
- Gibt zurückinteger
Beispiele
- Eingabe
- arg1 = "coddycode"
- Ausgabe
- 5
- Eingabe
- arg1 = "racecar"
- Ausgabe
- 4
- Eingabe
- arg1 = "a1b2a3b"
- Ausgabe
- 5
+12 versteckte Tests beim Einreichen
Tipps
Öffne sie nacheinander. Jeder verrät ein bisschen mehr.
Ein Teilstring ist ein zusammenhängender Abschnitt des Strings. Du suchst also nach der längsten Folge, die du abdecken kannst, ohne dass dasselbe Zeichen zweimal vorkommt.
Behalte ein Fenster mit einer linken und einer rechten Grenze bei. Vergrößere es rechts um jeweils ein Zeichen und verschiebe die linke Grenze nur, wenn das neue Zeichen bereits innerhalb des Fensters liegt.
Speichere den letzten Index, an dem jedes Zeichen vorkam. Wenn das neue Zeichen zuletzt am linken Rand oder danach gesehen wurde, verschiebe den linken Rand auf die Position direkt nach diesem Index. Der linke Rand bewegt sich nie rückwärts, und die Antwort ist das breiteste Fenster, das du jemals hattest.
Eine vollständige Lösungserklärung zu dieser Aufgabe folgt bald.
Ähnliche Aufgaben
Aufgaben mit denselben Ideen. Wer zwei oder drei davon löst, behält das Muster.
Python
def lengthOfLongestSubstring(s):
# Schreibe hier den CodeFall 1
Fall 2
Fall 3
Eingabe
arg1 = "coddycode"
Erwartet
5