Python :: Aufgabe #341

2 Lösungen Lösungen öffentlich

Längster Substring (Teilzeichenfolge)

Anfänger - Python 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ß

Lösungen:

vote_ok
von eisheiliger (3750 Punkte) - 11.04.2021 um 17:20 Uhr
Quellcode ausblenden Python-Code

"""
#341: Längster Substring (Teilzeichenfolge)
Ziel soll es sein, den längsten Substring (Teilzeichenfolge) herauszufinden, der aus einem Buchstaben gebildet wird und
aus mindestens 2 Zeichen besteht. Sind mehrere Substrings gleich lang, soll der des ersten Vorkommens ausgegeben werden.
"""


def prf_lsub(eingabe):
    ein_compr = ""
    zae = 0
    max_z = 0
    max_s = ""
    i = 0

    for x in eingabe:
        if x not in ein_compr:
            ein_compr += x

    for alle in ein_compr:
        while i * alle in eingabe:
            zae = i
            i += 1
        else:
            if zae > max_z:
                max_z = zae
                max_s = alle
                i = 0

    if max_z > 1:
        print(eingabe, max_z * max_s, max_z)
    else:
        print(eingabe, max_z)


def main():
    prf_lsub("abcde")
    prf_lsub("abccdec")
    prf_lsub("bbdddccaaa")


if __name__ == '__main__':
    main()


vote_ok
von AlexGroeg (2010 Punkte) - 12.04.2021 um 12:53 Uhr
Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-

def längster_substring(s):
    m = s[0]
    längster = []
    for i in range(1,len(s)):
        if s[i] != m[0]:
            m = s[i]
        else:
            m += s[i]
            längster.append(m)         
    try:
        sub = max(längster)        
        print('Länge:', len(sub))
        print('Substring: "{}"\n'.format(sub))    
    except:
        print('Länge: 0')
        print('Substring: "" -> keine Lösung, da kein Substring mit der Länge > 1\n') 


beispiele = ['abcde', 'abccdec', 'bbdddccaaa']

for s in beispiele:
    print('s{} = {}'.format(beispiele.index(s)+1, s))
    längster_substring(s)