1233. Unterordner aus dem Dateisystem entfernen
Schwierigkeit:Mittel
Themen: Array, String, Tiefensuche, Versuch
Geben Sie bei einer gegebenen Ordnerliste die Ordner zurück, nachdem Sie alle Unterordner in diesen Ordnern entfernt haben. Sie können die Antwort in beliebiger Reihenfolge zurücksenden.
Wenn sich ein Ordner[i] in einem anderen Ordner[j] befindet, wird er als Unterordner davon bezeichnet. Ein Unterordner von Ordner[j] muss mit Ordner[j] beginnen, gefolgt von einem „/“. Beispielsweise ist „/a/b“ ein Unterordner von „/a“, aber „/b“ ist kein Unterordner von „/a/b/c“.
Das Format eines Pfads besteht aus einer oder mehreren verketteten Zeichenfolgen der Form: „/“, gefolgt von einem oder mehreren englischen Kleinbuchstaben.
Beispiel 1:
Beispiel 2:
Beispiel 3:
Einschränkungen:
Hinweis:
Lösung:
Wir können eine Kombination aus Sortierung und String-Vergleich verwenden. Die folgenden Schritte beschreiben eine Lösung in PHP:
Ordner lexikografisch sortieren: Durch das Sortieren der Ordnerpfade in lexikografischer Reihenfolge wird sichergestellt, dass jeder Unterordner sofort seinem übergeordneten Ordner folgt. Auf „/a“ folgt beispielsweise in der sortierten Liste „/a/b“, sodass wir problemlos nach Unterordnerbeziehungen suchen können.
Unterordner identifizieren und herausfiltern: Wir können die sortierte Liste durchlaufen und prüfen, ob der aktuelle Ordnerpfad ein Unterordner des zuvor hinzugefügten Pfads ist. Wenn ja, überspringen wir es. Wenn nicht, fügen wir es unserer Ergebnisliste hinzu.
Implementieren Sie die Lösung in PHP: Wir verfolgen den letzten zur Ergebnisliste hinzugefügten Ordnerpfad. Wenn der aktuelle Ordner mit diesem letzten Ordner beginnt und unmittelbar ein / folgt, handelt es sich um einen Unterordner und sollte ignoriert werden.
Lassen Sie uns diese Lösung in PHP implementieren: 1233. Unterordner aus dem Dateisystem entfernen
Erläuterung:
Sortierung: Die Funktion sort() ordnet Ordner in lexikografischer Reihenfolge an. Dies erleichtert das Auffinden von Unterordnerbeziehungen, da Unterordner direkt auf ihre übergeordneten Ordner folgen.
Durchlaufen Sie jeden Ordner:
- Wenn das Ergebnis leer ist (erste Iteration) oder wenn der aktuelle Ordnerpfad nicht mit dem zuletzt hinzugefügten Ordner gefolgt von einem / beginnt, ist es kein Unterordner und wird dem Ergebnisarray hinzugefügt.
- Wenn es mit dem letzten Ordnerpfad beginnt und unmittelbar darauf ein / folgt, handelt es sich um einen Unterordner und wir überspringen das Hinzufügen zum Ergebnis.
Ergebnis: Die Funktion gibt ein Ergebnis zurück, das nur die Stammordner enthält, ausgenommen etwaige Unterordner.
Dieser Ansatz ist effizient mit einer zeitlichen Komplexität von O(n log n) aufgrund des Sortierschritts und der lineare Scan hat O(n). ), was dies zu einer guten Lösung für größere Eingaben innerhalb der Einschränkungen des Problems macht.
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 vonUnterordner aus dem Dateisystem entfernen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!