
Inhalt
Die Fakten:
| Plattform: | codewars.com |
| Name: | Backspaces in string |
| Level: | 6 kyu |
| Sprache: | TypeScript |
Beschreibung:
Assume "#" is like a backspace in string. This means that string "a#bc#d" actually is "bd"
Your task is to process a string with "#" symbols.
Examples
"abc#d##c" ==> "ac"
"abc##d######" ==> ""
"#######" ==> ""
"" ==> ""
Quelle: codewars.com
Lösung
Pseudo-Code
Wie immer gibt's reichlich Varianten, hier ist eine meiner.
Erst die Lösungsschritte in Pseudo-Code. Los geht’s:
Lösungsschritte
Schritt 1
Als erstes drehen wir den Input-String um.
Schritt 2
Dann loopen wir durch alle Zeichen.
Schritt 3
Wenn das aktuelle Zeichen ein # ist, erhöhen wir einen Zähler um 1 und entfernen das #.
Schritt 4
Ansonsten prüfen wir den #-Zähler.
Schritt 5
Wenn der #-Zähler positiv ist, entfernen wir das Zeichen und prüfen das nächste.
Schritt 6
Ansonsten fügen wir das Zeichen an den Anfang einer Output-Variablen.
Code
Geil. Übersetzen wir unseren Pseudo-Code in TypeScript:
Lösungsschritte
Meine erste Zeile:
export function cleanString(s: string): string {
Dann erstellen wir uns zuerst unseren Zähler und die Output-Variable:
let backspaceCount = 0;
let output = "";
Als nächstes wandeln wir den Input-String in ein Array, drehen es um und speichern es in einer Variablen:
const reversedChars = s.split("").reverse();
Dann der Loop durch alle Zeichen:
for (let char of reversedChars) {
Wenn das aktuelle Zeichen ein # ist, erhöhen wir unseren Zähler um 1 und gehen zum nächsten:
if (char === "#") {
backspaceCount++;
continue;
}
Dann prüfen wir, ob unser Zähler positiv ist. Wenn ja, verringern wir unseren Zähler um 1 und gehen zur nächsten Iteration:
if (backspaceCount > 0) {
backspaceCount--;
continue;
}
Wenn beides nicht zutrifft, können wir das aktuelle Zeichen an den Anfang unseres Outputs setzen:
output = char + output;
}
Nach dem Loop nur noch unsere Output-Variable zurückgeben:
return output;
}
Voilá! 💪
Komplettlösung
export function cleanString(s: string): string {
let backspaceCount = 0;
let output = "";
const reversedChars = s.split("").reverse();
for (let char of reversedChars) {
if (char === "#") {
backspaceCount++;
continue;
}
if (backspaceCount > 0) {
backspaceCount--;
continue;
}
output = char + output;
}
return output;
}