Heim >Backend-Entwicklung >PHP-Tutorial >. Seltsamer Drucker
664. Seltsamer Drucker
Schwierigkeit:Schwer
Themen:String, dynamische Programmierung
Es gibt einen seltsamen Drucker mit den folgenden zwei besonderen Eigenschaften:
Geben Sie bei einer gegebenen Zeichenfolge s die Mindestanzahl an Umdrehungen zurück, die der Drucker zum Drucken benötigte.
Beispiel 1:
Beispiel 2:
Einschränkungen:
Lösung:
Wir können dynamische Programmierung verwenden. Die Idee besteht darin, die Anzahl der zum Drucken der Zeichenfolge erforderlichen Windungen zu minimieren, indem man sie in Teilprobleme aufteilt.
Das Problem kann durch dynamische Programmierung gelöst werden. Die Idee besteht darin, das Problem in kleinere Teilprobleme zu unterteilen, wobei Sie die Mindestumdrehungen bestimmen, die zum Drucken jedes Teilstrings von s erforderlich sind. Wir können die folgende Beobachtung nutzen:
Sei dp[i][j] die minimale Anzahl an Umdrehungen, die zum Drucken der Teilzeichenfolge s[i:j+1] erforderlich sind.
Lassen Sie uns diese Lösung in PHP implementieren: 664. Seltsamer Drucker
Erläuterung:
DP-Array: Das 2D-Array dp[i][j] stellt die minimale Anzahl von Umdrehungen dar, die erforderlich sind, um den Teilstring von Index i bis j zu drucken.
Initialisierung: Wir initialisieren dp[i][i] = 1, da ein einzelnes Zeichen in einer Runde gedruckt werden kann.
Füllen der DP-Tabelle:
- Wenn die Zeichen bei i und j gleich sind ($s[$i] == $s[$j]), dauert das Drucken von i nach j genauso viele Runden wie das Drucken von i nach j-1 da $s[$j] im selben Zug wie $s[$i] gedruckt werden kann.
- Wenn sie unterschiedlich sind, versuchen wir die minimale Anzahl von Windungen zu finden, indem wir die Saite an verschiedenen Punkten (k) teilen.
Ergebnis: Die Mindestanzahl an Umdrehungen, die zum Drucken der gesamten Zeichenfolge erforderlich sind, wird in dp[0][$n - 1] gespeichert.
Diese Lösung berechnet effizient die Mindestanzahl der zum Drucken der Zeichenfolge erforderlichen Windungen, indem alle möglichen Möglichkeiten zum Teilen und Drucken der Zeichenfolge berücksichtigt werden.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt von. Seltsamer Drucker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!