2016-12-10 2 views
3

Ich suche nach einer Funktion in Python, wo Sie eine Zeichenfolge als Eingabe geben, wo ein bestimmtes Wort mehrmals wiederholt wurde, bis eine bestimmte Länge erreicht hat.Python finde wiederholten Teilstring in String

Die Ausgabe wäre dann dieses Wort. Das wiederholte Wort ist nicht notwendig in seiner Gesamtheit wiederholt und es ist auch möglich, dass es überhaupt nicht wiederholt wurde.

Zum Beispiel:

"pythonpythonp" => "python" 

"hellohello" => "hello" 

"appleapl" => "apple" 

"spoon" => "spoon" 

Kann jemand mir ein paar Hinweise, wie diese Art von Funktion zu schreiben?

+0

Woher weiß Ihr Programm, was ein Wort ist? Zum Beispiel, wie würde es wissen, dass "Appleapl" kein einziges Wort ist? Was ist mit Wörtern, die andere Wörter enthalten? – elethan

+0

Ich fange mit Hinweisen an. Wenn du immer noch feststeckst, nachdem du sie ausprobiert hast, poste deine versuchte Lösung und wir können dir mehr geben, worüber du nachdenken und es versuchen kannst. Hier sind die Hinweise. (1) Erzeugen Sie zuerst die möglichen Unterzeichenfolgen, die Sie in jeder Zeichenfolge suchen möchten. Gibt es eine minimale oder maximale Länge? Erstellen Sie eine Liste oder einen Satz von Teilzeichenfolgen aus der Eingabezeichenfolge. (2) Wenn Sie nach den Unterzeichenfolgen suchen müssen, versuchen Sie, die eindeutigen Positionen innerhalb der Eingabezeichenfolge zu identifizieren, in der die Unterzeichenfolgen angezeigt werden. Das sollte dich beginnen! –

+0

Warum ist nicht die Ausgabe von "pythonpythonp" => "ythonp"? –

Antwort

4

Sie können dies tun, indem Sie die Teilzeichenfolge eine bestimmte Anzahl von Malen wiederholen und testen, ob sie der ursprünglichen Zeichenfolge entspricht.

Sie werden es für jede einzelne mögliche Länge Zeichenfolge, um zu versuchen, es sei denn, dass als Variable

Hier ist der Code gespeichert haben:

def repeats(string): 
    for x in range(1, len(string)): 
     substring = string[:x] 

     if substring * (len(string)//len(substring))+(substring[:len(string)%len(substring)]) == string: 
      print(substring) 
      return "break" 

    print(string) 

repeats("pythonpytho") 
+0

schlägt mit "Löffel" fehl. –

+0

Vielen Dank für das, ich habe den Fehler behoben –

0

beginnen mit dem Bau eines Präfix-Array.

Schleife durch sie in umgekehrter Richtung und stoppen Sie das erste Mal etwas finden, das in der Zeichenfolge wiederholt ist (das heißt, es hat eine str.count()>1.

Wenn nun die gleiche Teilzeichenfolge direkt neben sich selbst existiert, können Sie es zurückgeben Sie müssen jedoch das Beispiel 'appleappl' berücksichtigen, in dem der vorgeschlagene Algorithmus appl zurückgeben würde.Wenn Sie also einen Teilstring finden, der mehr als einmal in Ihrem String vorhanden ist, erhalten Sie als Ergebnis das zurück Teilstring plus was auch immer zwischen seinem nächsten Vorkommen ist, nämlich für 'appleappl' Sie geben 'appl' +'e' = 'apple' zurück Wenn keine solche Zeichenfolgen gefunden werden, geben Sie das ganze Wort zurück, da keine Wiederholungen vorhanden sind

def repeat(s): 
    prefix_array=[] 
    for i in range(len(s)): 
     prefix_array.append(s[:i]) 
    #see what it holds to give you a better picture 
    print prefix_array 

    #stop at 1st element to avoid checking for the ' ' char 
    for i in prefix_array[:1:-1]: 
     if s.count(i) > 1 : 
      #find where the next repetition starts 
      offset = s[len(i):].find(i) 

      return s[:len(i)+offset] 
      break 

    return s 


print repeat(s) 
Verwandte Themen