Właśnie rozpoczął przeżywa „Cracking kodowania Wywiad” i mają następujące rozwiązanie tego problemu:Biorąc pod uwagę dwa ciągi, jest jednym anagram drugiej
public static bool isAnagram(String s, String t)
{
if (s == "" || t == "") return false;
else if (s.Length != t.Length) return false;
int[] letters = new int[256];
char[] s_array = s.ToCharArray();
foreach(char c in s_array)
{
letters[c]++;
}
for (int i = 0; i < t.Length; i++)
{
int c = t[i];
if (--letters[c] < 0)
{
return false;
}
}
return true;
}
to dość dużo verbatim rozwiązanie z książka, tylko w języku C#, nie Java i z dodatkowymi zerami kontrolnymi. Rozwiązałem też pytanie za pomocą LINQ, ale chciałem dodatkowego rozwiązania, które nie wymagałoby sortowania.
Czy to podejście może być nieco bardziej eleganckie? Kod działa dobrze, chcę tylko wiedzieć, czy istnieje bardziej eleganckie lub lepsze rozwiązanie. Dzięki!!
Może lepsze dopasowanie do http://codereview.stackexchange.com – sloth
'char' reprezentuje znak Unicode w [UTF-16] (http://msdn.microsoft.com/en-gb/library/system.char.aspx). Jest ich więcej niż 256 (a nawet jeśli nie było, należy wziąć pod uwagę surogaty). –
Co masz na myśli mówiąc "bardziej elegancki"? To jest dość eleganckie w mojej książce. –