So finden Sie alle sich wiederholenden Teilzeichenfolgen in einer bestimmten Zeichenfolge

Ich bin kürzlich auf eine Interviewfrage gestoßen: Um alle sich wiederholenden Teilzeichenfolgen in einer bestimmten Zeichenfolge mit einer minimalen Größe von 2 zu finden. Der Algorithmus sollte effizient sein.

Der Code für die obige Frage ist unten angegeben, aber er ist nicht effizient.

<code>#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"));
}
</code>

Meine Frage ist, ob es eine Datenstruktur gibt, die die obige Frage in der zeitlichen Komplexität von O (N) umsetzen kann.

Wenn Ihre Antwort Suffixbaum oder Hashing ist, erläutern Sie dies bitte.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage