Quando hai un problema complicato che non puoi risolvere, prova a scomporlo in problemi più semplici e risolvili.
Il tuo problema è stato riformulato:
Remove the common prefix and suffix from a list of strings.
Un problema più semplice potrebbe essere:
Find the common prefix for a pair of strings.
Questo dovrebbe essere molto più semplice da risolvere, ad esempio in questo modo:
string GetPrefix(string first, string second)
{
int prefixLength = 0;
for (int i = 0; i < Math.Min(first.Length, second.Length); i++)
{
if (first[i] != second[i])
break;
prefixLength++;
}
return first.Substring(0, prefixLength);
}
Ora che hai questo, puoi ricostruire il problema originale:
Find the common prefix for a list of strings.
Qui è molto utile rendersi conto che il prefisso delle tre stringhe è uguale al prefisso del prefisso delle prime due stringhe e della terza stringa. (Hmm, questo suona confuso, forse sarà più chiaro in una notazione più formale: prefisso (A, B, C) = prefisso (prefisso (A, B), C).)
Ciò significa che puoi utilizzare il metodo LINQ Aggregate()
su GetPrefix()
metodo sopra per ottenere il prefisso di un intero elenco di stringhe:
string GetPrefix(IEnumerable<string> strings)
{
return strings.Aggregate(GetPrefix);
}
Il prossimo passo:
Remove the common prefix from a list of strings.
Ora che possiamo trovare il prefisso comune, possiamo rimuoverlo usando LINQ Select()
e Substring()
:
IEnumerable<string> RemovePrefix(IEnumerable<string> strings)
{
var prefix = GetPrefix(strings);
return strings.Select(s => s.Substring(prefix.Length, s.Length - prefix.Length));
}
Si presume che si desideri ottenere una nuova sequenza contenente le stringhe filtrate. Se desideri modificare una raccolta esistente, utilizza un ciclo for
anziché Select()
.
Un ultimo passaggio:
Remove the common prefix and suffix from a list of strings.
Lascerò questo come esercizio per il lettore. Questa risposta contiene un semplice codice per l'inversione di una stringa , che potrebbe essere utile. (Penso che tu non abbia bisogno del codice di altre risposte a quella domanda, dal momento che sembra che le tue stringhe siano solo ASCII.)