Algorithmus zu finden, der am meisten common substrings in einem string

Gibt es Algorithmus, der verwendet werden kann, finden die häufigsten Sätze (oder Zeichenketten) in einem string? Zum Beispiel die folgende Zeichenfolge wäre das "Hallo Welt" als gemeinsame zwei-Wort-Satz:

"hello world this is hello world. hello world repeats three times in this string!"

In der Zeichenfolge oben, die häufigste string (nachdem die leere Zeichenfolge Zeichen, die wiederholt eine unendliche Anzahl von Zeiten) wäre das Leerzeichen .

Gibt es eine Möglichkeit um eine Liste von gemeinsamen Teilzeichenfolgen in dieser Zeichenfolge, aus den gängigsten zu den am wenigsten verwendeten?

  • Definieren, was meinst du mit phrase, die substring - "l" ist häufiger dann "hello world". Und natürlich "hello" ist mindestens so Häufig wie "hello world".
  • Ich meinte wirklich "die meisten common substring in einem string".
  • Dann werden die meisten common substring die leere Zeichenkette (wiederholt sich unendliche Male). Die Sekunde danach ist das häufigste Zeichen. Finden es kann leicht getan werden mit einem Histogramm in O(n).
  • Ich glaube nicht, dass Sie wirklich verstanden, amit ' s Kommentar. Sie schreiben, "In dem string vor, der häufigste string wäre hello world"; aber der Teilstring hello world tritt nur dreimal, in der Erwägung, dass die substring - l tritt neun mal. (Und is vier mal vorkommt. Und " " tritt fünfzehn mal.)
  • Nach dem Auffinden der häufigste Charakter, würde ich versuchen, die häufigsten zwei-Zeichen-strings, die begann mit jedem Charakter. Dann würde ich versuchen, die häufigsten drei-Zeichen-strings, die begann mit den gängigsten zwei-Zeichen-strings, und so weiter.
  • Ich reparierte den Fehler - vielen Dank für die Klarstellung!
  • "" ist das am meisten common substring, es wiederholt sich unendliche Male.
  • en.wikipedia.org/wiki/Suffix_tree#Functionality und en.wikipedia.org/wiki/Suffix_array wenn Sie denken, große Streicher bei 10000 oder 100000 Maßstab.
  • "Hallo Welt" - Antworten deutet darauf hin, dass Sie wollen, finden Sie die längste doppelten Teilstring
  • dann bedeutet es, dass die längste Zeichenkette, die angezeigt wird, zweimal? Was ist mit diesem Beispiel "AAAAAAAAAAAAAAAAAAAAAAA hello world AAAAAAAAAAAAAAAAAAAAAAA hello world hello world". Hier die am häufigsten vorkommenden Teilstring 'A' und den längsten substring (Auftritt mindestens zweimal) ist "AAAAAAAAAAAAAAAAAAAAAAA". Was muss meine Funktion zurückgeben?
  • es gibt "AA..." das ist korrekt wenn die Antwort auf die erste Frage ist "hello world" und nicht "l" das ist das gemeinsame Teilzeichenfolge nach " ".

Schreibe einen Kommentar