.NET Verificare se una stringa è palindroma
Link sponsorizzati
Cosa significa che una stringa è palindroma? Cioè che letta al contrario da la stessa parola, cioè, ‘alla’ per esempio è una parola palindroma, per esempio.
Questo funzione ricorsiva in C# verifica se una stringa è palindroma o meno!
Link sponsorizzati
{
if (s.Length == 0 || s.Length == 1)
return true;
else
{
if (s[0] != s[s.Length - 1])
return false;
else
return palindrom(s.Substring(1, s.Length - 2));
}
}
Vi spiego come funziona, allora, se la stringa è lunga 0 caratteri o 1 carattere, allora è palindroma, altrimenti, elimino due caratteri dalla stringa, il primo e l’ultimo, solo se sono uguali, e ricontrollo. Se sono diversi, allora la stringa non è palindroma.
Facciamo un esempio, con la parola alla
a è uguale ad a, quindi passo ll
l è uguale ad l, quindi passo la stringa vuota
la stringa vuota mi torna true
con una parola non palindroma, ad esempio, allora
a è uguale ad a, quindi passo 'llor'
l è diverso da r, quindi torno false
Il concetto di base è molto semplice. La funzione, possiamo anche utilizzarla con un numero, oltre che con una stringa, come facciamo? Beh… leggiamo il numero e lo trasformiamo in una stringa
MessageBox.Show(palindrom(q.ToString()).ToString());
Il concetto della stringa palindroma è sempre lo stesso!
Il codice è facile, e si può modificare per farlo funzionare anche con Visual Basic .NET.
Link sponsorizzati


Per onor di cronaca, in Python:
palindrom = lambda s: True if s == s[::-1] else False
In C comunque pare più chiaro grazie a strrev:
http://www.laynetworks.com/C%20Program_Palindrome.htm
Java & Ruby:
http://moose56.com/blog/2008/01/24/palindrome-java-ruby/
La cosa buffa è che spesso esistono metodi molto semplici per fare il reverse, mi chiedevo se in C# esistesse qualcosa di analogo, dato che è presente anche in altri linguaggi.
Spero di non essere OT, ma i parallelismi tra linguaggi mi affascinano
No no, tranquillo non sei OT. Tanto per mostrare un metodo alternativo si potrebbe usare una cosa di questo tipo:
{
char[] a = s.ToCharArray();
Array.Reverse(a);
return new string(a);
}
La classe string non presenta un metodo suo per il reverse, in quel modo aggiri la cosa.
Io ho adottato quel metodo perchè mi piace la ricorsione, come puoi vedere è tutto abbastanza semplice e lineare. Ovviamente questo non esclude soluzioni alternative