Może ktoś też chce się pobawić w to? Zachęcam! :p
Oczywiście takich stronek jest mnóstwo - np codehunt (tylkoC#) itp
Edit: moje rozwiązanie przykładu z obrazka:
Kod: Zaznacz cały
// funkcja obracajaca:
// https://stackoverflow.com/questions/228038/best-way-to-reverse-a-string
string Reverse(string text)
{
if (text == null) return null;
// this was posted by petebob as well
char[] array = text.ToCharArray();
Array.Reverse(array);
return new String(array);
}
// funkcja zwraca pozycje po swoim przejezdzie
int nawias_obroc(string napis_in, int pozycja, ref string string_out)
{
string temp = "";
int i = 0;
for( i = pozycja; i < napis_in.Length;)
{
// poczatek kolejnego nawiasu
if( napis_in[i] == '(' )
{
string x = "";
i = nawias_obroc( napis_in, i + 1, ref x);
temp += x;
continue;
}
else
{
// koniec nawiasu - zakonczenie algorytmu - pozwracanie wartosci
if(napis_in[i] == ')')
{
temp = Reverse(temp);
string_out = temp;
return i + 1;
}
else // normalne kopiowanie znaczkow
{
temp += napis_in[i];
}
}
i++;
}
temp = Reverse(temp);
string_out = temp;
return i;
}
string reverseParentheses(string s)
{
string napis = "";
int i = 0;
for( i = 0; i < s.Length;)
{
// poczatek kolejnego nawiasu - wywolujemy nasza rekurencje
if( s[i] == '(' )
{
string x = "";
i = nawias_obroc( s, i + 1,ref x);
napis += x;
continue;
}
else
{
// normalne kopiowanie po literce - tutaj nie dajemy
// przypadku z zamknietym nawiasem - jest to obsluzone w funkcji nawias_obroc
napis += s[i];
}
i++;
}
return napis;
}