Finden alle die sich wiederholende Teilstring in einem gegebenen string

Ich recetly kommen über eine interview-Frage :
Finden alle die sich wiederholende substring in einem angegebenen string mit einer minimalen Größe von 2.
Der Algorithmus sollte effizient sein.

Code für obige Frage wird unten gegeben, aber es ist nicht effizient.

#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>
#include <string>

using namespace std;

int main()
{
    typedef string::const_iterator iterator;
    string s("ABCFABHYIFAB");
    set<string> found;

    if (2 < s.size())
        for (iterator i = s.begin() + 1, j = s.end(); i != j; ++i)
            for (iterator x = s.begin(); x != i; ++x)
            {
                iterator tmp = mismatch(i, j, x).second;;
                if (tmp - x > 1)
                    found.insert(string(x, tmp));
            }

            copy(found.begin(), found.end(),ostream_iterator<string>(cout, "\n"));
}

Meine Frage ist, dass, gibt es eine Datenstruktur, die implementieren kann, die obige Frage in der Zeit
Komplexität von O(N)?

Wenn Ihre Antwort Suffix-tree oder Hash bitte erläutern Sie es.

Wenn ich das richtig verstehe, betrachten Sie zwei (gleiche Größe) von Teilstrings unterschiedlich in die Ausgabe, wenn Ihre start-Indizes sind unterschiedlich, nicht wenn deren Inhalt unterschiedlich ist, richtig?
Lesen Sie über die suffix-Bäume, meiner Meinung nach, ein wiki ist ein guter start hier: en.wikipedia.org/wiki/Suffix_tree
Sie sind darauf hindeutet, die bestmögliche Lösung zu finden. Wiederholte sub-strings ist ein sehr häufiges problem in CS. Kannst du bitte diesen post als Lösung? Es wird sehr hilfreich für die website-Besucher. Prost!
so wie ich das sehe ist die akzeptierte Antwort enthält die gleichen nach meinem Kommentar, also ich nicht wiederholen möchte, da eine Antwort. Vielleicht sind die einige link sollte Hinzugefügt werden, dass die akzeptierte Antwort.

InformationsquelleAutor IndieProgrammer | 2012-04-07

Schreibe einen Kommentar