C# :: Aufgabe #380
2 Lösungen
Längster Substring (Teilzeichenfolge)
Anfänger - C#
von JKooP
- 10.04.2021 um 18:51 Uhr
Gegeben ist ein beliebig langer String (Zeichenkette) bestehend aus Kleinbuchstaben.
Ziel soll es sein, den längsten Substring (Teilzeichenfolge) herauszufinden,
der aus einem Buchstaben gebildet wird und aus mindestens 2 Zeichen besteht.
Schreibe eine Methode/Funktion, die sowohl die Länge als auch den Substrings selbst auf dem Bildschirm ausgibt.
Beispiele:
s1 = abcde
Länge: 0
Substring: "" -> keine Lösung, da kein Substring mit der Länge > 1
s2 = abccdec
Länge: 2
Substring: "cc"
s3 = "bbdddccaaa"
Länge: 3
Substring: "aaa"
Aufgabe 1:
Sind mehrere Substrings gleich lang, soll ein beliebiger ausgewählt werden.
Aufgabe 2:
Sind mehrere Substrings gleich lang, soll der des ersten Vorkommens ausgegeben werden.
zu s3:
Substring: "ddd"
Viel Spaß
Ziel soll es sein, den längsten Substring (Teilzeichenfolge) herauszufinden,
der aus einem Buchstaben gebildet wird und aus mindestens 2 Zeichen besteht.
Schreibe eine Methode/Funktion, die sowohl die Länge als auch den Substrings selbst auf dem Bildschirm ausgibt.
Beispiele:
s1 = abcde
Länge: 0
Substring: "" -> keine Lösung, da kein Substring mit der Länge > 1
s2 = abccdec
Länge: 2
Substring: "cc"
s3 = "bbdddccaaa"
Länge: 3
Substring: "aaa"
Aufgabe 1:
Sind mehrere Substrings gleich lang, soll ein beliebiger ausgewählt werden.
Aufgabe 2:
Sind mehrere Substrings gleich lang, soll der des ersten Vorkommens ausgegeben werden.
zu s3:
Substring: "ddd"
Viel Spaß
Lösungen:
using System;
namespace laenger_substring_in_string
{
class Program
{
static void Main(string[] args)
{
string zeichenfolge = "bbdddccaaa";
string ausgabe = "";
string endausgabe = "";
int zaehler = 0;
int pruefzaehler = 0;
foreach (var item in zeichenfolge)
{
foreach (var item1 in zeichenfolge)
{
if (item == item1)
{ //Solange das aktuell gefragte Item matched wird es zur ausgabe hinzugefügt und der Zähler erhöht
ausgabe = ausgabe + item;
zaehler++;
if (zaehler > pruefzaehler)
{ //Ist ein Höchstwert erreicht so wird dieser in den prüfzähler zwischengespeichert.
pruefzaehler = zaehler;
endausgabe = ausgabe;
}
}
else if (item != item1)
{ //Matched das Item nicht mehr so wird die Ausgabe auf "" gestellt und der Zähler wieder auf 0
ausgabe = "";
zaehler = 0;
}
}
}
Console.WriteLine(endausgabe);
}
}
}
NET 5.x; C# 9.x; VS-2019
C#-Code
using System;
using System.Linq;
using System.Text.RegularExpressions;
var s = "bbdddccaaa";
var (length, substr) = LongestSubstring(s);
Console.WriteLine($"Länge: {length}, Substring: {substr}");
static (int length, string substr) LongestSubstring(string s)
{
var r = Regex.Matches(s, "(.)\\1*").OrderBy(x => -x.Length).ToList().FirstOrDefault();
var l= r.Length;
return l < 2 ? (0, "keine Lösung") : (l, r.ToString());
}
