Ho una soluzione di forza bruta per calcolare tutte le sottostringhe in una stringa di input in tempo O (n^2). Ci vuole molto tempo quando la mia stringa di input è molto lunga.C'è un trucco/algoritmo con il quale possiamo trovare tutte le sottostringhe possibili nel tempo O (n)
Come possiamo trovare tutte le sottostringhe possibili nel tempo O (n)?
Sto cercando solo il conteggio di tutte le sottostringhe in cui il primo e l'ultimo carattere nella sottostringa sono uguali. Come puoi vedere, restituisco solo il conteggio delle funzioni nel mio codice qui sotto. Voglio farlo in O (n)
La mia soluzione di forza bruta:
// I am calculating count of all substrings where first and last substring character are equal
public class Solution {
public static void main(String[] args) {
String inputString = "ababaca";
System.out.println(findSubstringByBruteForcce(inputString, inputString.length()));
}
private static long findSubstringByBruteForcce(String inputString, int length) {
long count = 0;
for (int i = 0; i < length; i++) {
for (int j = 1; j <= length - i; j++) {
String str = inputString.substring(i, i + j);
if(str.length() == 1){
count = count + 1;
}else {
if(str.substring(0, 1).equals(str.substring(str.length() - 1, str.length()))){
count = count + 1;
}
}
}
}
return count;
}
}
Come posso ottimizzare sopra soluzione e trovare risposta a O (n)? La stringa di input può essere estremamente grande (circa 10^6 di lunghezza) e la forza bruta viene eseguita in circa 20 secondi. Voglio che il tempo di esecuzione massimo sia inferiore a 2 secondi.
Stai cercando le sottostringhe effettive o il conteggio della sottostringa? Stai cercando tutte le sottostringhe (inclusi i duplicati) o solo sottostringhe uniche? –
Sto cercando solo il conteggio di tutte le sottostringhe in cui il primo e l'ultimo carattere nella sottostringa sono gli stessi. Come puoi vedere, restituisco solo il conteggio dalla funzione. –
Sto votando per chiudere questa domanda come off-topic perché questo è un contest di programmazione in corso. –