Avendo 2 stringhe come:modo più efficace di ricercare una stringa C di corda B nella stringa A in LINQ
string a = "ATTAGACCTGCCGGAA";
string b = "GCCGGAATAC";
Vorrei eliminare solo la parte che è comune in entrambe le stringhe e poi il concatenare resto esso. Devo dire che quello che ho bisogno di eliminare una parte soltanto a sinistra abbinato quindi vorrei ottenere
ingresso
ATTAGACCTGCCGGAA
GCCGGAATAC
uscita
ATTAGACCTGCCGGAATAC
In primo luogo ho pensato di utilizzare un modello e poi Seacrh per esso , tuttavia questo non è possibile in quanto non conosco il modello in anticipo (la lunghezza dei caratteri combinati è variabile)
Poi ho pensato di cercare tutta la stringa b
in a
allora se non ha avuto successo, cancellare un carattere nella stringa a
(L'ultimo perché voglio preservare la stringa senza eguali più di sinistra) e quindi ciclo fino a quando non ho più caratteri in b
come
string a = "ATTAGACCTGCCGGAA";
string b = "GCCGGAATAC";
int times = b.Length;
string wantedString = string.Empty;
string auxString = b;
while (times > 0)
{
if (!a.Contains(auxString))
{
//save last char and then delete it from auxString
wantedString += auxString[auxString.Length - 1];
auxString = auxString.TrimEnd(auxString[auxString.Length - 1]);
}
else
break;
times--;
}
//reverse string
char[] reversedToAppend = wantedString.ToCharArray();
Array.Reverse(reversedToAppend);
string toAppend = new string(reversedToAppend);
così la risposta sarebbe solo per fare a + toAppend ;
C'è un modo per rendere questo più efficiente? (Forse in LINQ?)
Modifica
Come @lavin sottolinea correttamente c
può verificarsi in qualsiasi parte a
, pur essendo un prefisso di b. ad esempio se a=AAT
e b=AAG
, il codice deve restituire AATG
. il motivo è perché la stringa comune che inizia a sinistra è c=AA
. Cancelliamo questo da b
e poi otteniamo a=AAT
con la conseguente G
AAT
AAG
risultante
AATG
Altro esempio potrebbe essere:
a=ATTTGGGCCGCGCGCGAAAACCCCGCG
b= AACCCCGCGCGCA
qui
c= AACCCCGCG
così risultato dovrebbe essere
result = ATTTGGGCCGCGCGCGAAAACCCCGCGCGCA
Perché è necessario che sia più efficiente in ** LINQ **? – Amit
Immagino che allocazione di memoria o aggregati usati da LINQ – cMinor
Non penso che forzare LINQ abbia senso qui. Si prega di modificare la tua domanda e tag. Aggiungerei anche un tag algoritmo in quanto questa è la domanda – Amit