C# :: Aufgabe #397 :: Lösung #3

4 Lösungen Lösungen öffentlich
#397

String-Vergleich mit Rücktaste/Backspace

Anfänger - C# von JKooP - 12.05.2021 um 15:38 Uhr
Gegeben sind zwei Strings (Texte) bestehend aus einer Anzahl (<100) Kleinbuchstaben (a-z) und
Backspaces (Rücktastenzeichen) welche hier als Hashtag/Raute (#) dargestellt werden.
Dabei können die Strings unterschiedlicher Länge sein.
Ziel soll es sein zu überprüfen, ob die beiden Strings (s1, s2) identisch sind.

Beispiele:

s1 = ab#c
s2 = ae#c
Lösung: true ("ac" == "ac"), denn Backspace löscht in s1 das b und in s2 das e

s1 = ab##
s2 = e#f#
Lösung: true ("" == ""), denn Backspace löscht in s1 zuerst das b und dann das a und in s2 zuerst das e und dann das f

s1 = a#c
s2 = ac#
Lösung: false ("c" != "a") , denn Backspace löscht in s1 das a und in s2 das c

s1 = ####
s2 = ###a#
Lösung: true

s1 = abcdefg
s2 = abcder#fr#g
Lösung: true

Schreibe eine Methode/Funktion, die für obige Aufgabenstellung als Ergebnis true/false liefert.

Viel Spaß
#3
vote_ok
von JKooP (18090 Punkte) - 21.05.2021 um 21:53 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

var lst = new List<(string s, string t)>
{
    ("ab#c", "ae#c"), ("ab##", "e#f#"), ("a#c", "ac#"), ("####", "###a#"), ("abcdefg", "abcder#fr#g")
};

lst.Select(x => BackspaceCompare(x.s, x.t)).ToList().ForEach(Console.WriteLine);

bool BackspaceCompare(string s, string t)
{
    if (s == t) return true;

    List<char> GetCleaned(string x)
    {
        var l = x.ToList();

        while (l.Contains('#'))
        {
            int i = l.IndexOf('#');
            int t = i != 0 ? 1 : 0;
            l.RemoveRange(i - t, 1 + t);
        }
        return l;
    }

    return GetCleaned(s).SequenceEqual(GetCleaned(t));
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben