Dies ist ein in C++ geschriebener Code, der Standardbibliotheken verwendet, um die String-Ähnlichkeit eines Strings S mit jedem seiner Suffixe zu finden.Was kann ich tun, um diesen Code zu beschleunigen (String Similarity)?
Obwohl es die richtige Ausgabe gibt, braucht es viel Zeit für große Strings. Hier ist der Code:
#include <iostream>
#include <string>
using namespace std;
int sim(string a, string b){
int count=0;
int sa=a.size();
int sb=b.size();
int iter;
if(sa>sb) iter=sb;
else iter=sa;
for(int i=0; i<iter; i++){
if (a[i]!=b[i]) break;
else count++;
}
return count;
}
int strsim(string a){
int sum=0;
int s=a.size();
for(int i=0; i<s; i++){
sum=sum+sim(a,a.substr(i));
}
return sum;
}
int main(){
int n;
cin >> n;
string a[n];
for(int i=0; i<n; i++){
cin >> a[i];
}
for(int i=0; i<n; i++){
cout << strsim(a[i]) << '\n';
}
}
Constraints: Die Länge der einzelnen Strings höchstens 100000 und enthält nur Kleinbuchstaben und die Anzahl der Testfälle, ‚n‘ darf nicht länger als 10
Probe I/O :
Input:
1 ababaa
Output:
11
d.h, 6 + 0 + 3 + 0 + 1 + 1 = 11
Sie könnten die Stringargumente in den Funktionen immer als konstante Referenzen anstelle von Kopien übergeben. Und schalten Sie auch weitere Optimierungen durch den Compiler ein. –
'astr (i)' gibt einen brandneuen String zurück, der eine dynamische Zuweisung zur Folge hat. Ändern Sie Ihre Funktionen so, dass sie an Iteratoren arbeiten (wie es bei den meisten C++ - Algorithmen der Fall ist), so dass Sie einfach verschiedene Iteratoren in die Strings einfügen können. – GManNickG
Oder Sie könnten einfach wechseln, um 'char *' zu verwenden und in Ihrer 'strsim' Funktion vergleichen Sie' a' mit '& a [i]'. – user2553780