Czy podany string jest palindromem?

Palindrom to wyrażenie brzmiące tak samo czytane od lewej do prawej jak i od prawej do lewej. Przykłady:

  • Ala
  • Kobyła ma mały bok
  • Atak kata
  • Może jutro ta dama da tortu jeżom
Napisz metodę, która jako parametr przyjmuje wyrażenie typu string i zwraca wartość typu true jeżeli wyrażenie jest palindromem. Jeśli wyrażenie nie jest palindromem metoda powinna zwrócić false. Pisząc kod miej na uwadze dobre praktyki oraz ewentualne problemy wydajnościowe w przypadku długich wyrażeń.


Przykładowe rozwiązanie

public static bool IsPalindrom(string wordToCheck)
{
  if (String.IsNullOrEmpty(wordToCheck))
    return false;
  wordToCheck = wordToCheck
                .Replace(" ", "")
                .ToLower();

  int length = wordToCheck.Length;

  for (int i = 0; i < length / 2; i++)
  {
    if (wordToCheck[i] != wordToCheck[length - i - 1])
      return false;
  }
  return true;
}

Wyjaśnienie

Na początku sprawdzamy czy nie został przekazany pusty ciąg znaków bądź wartość null. Jeżeli tak to zwracamy false.
 if (String.IsNullOrEmpty(wordToCheck))
    return false;

Następnie musimy wykonać czynności:

  • usuwamy spacje z otrzymanego wyrażenia
  • zamieniamy duże litery na małe
wordToCheck = wordToCheck
              .Replace(" ", "")
              .ToLower();

Proces sprawdzania jest następujący:
sprawdzamy pierwszą oraz ostatnią literę wyrażenia, jeżeli są różne to od razu zwracamy false. Następnie porównujemy drugą i przedostatnią literę itd. Gdy dojdziemy do połowy nie ma sensu porównywać dalej ponieważ litery te zostały już sprawdzone. Jeśli pierwsz połowa wyrażnia równa sie drugiej połowie wyrażenia zwracamy true.

Nixon94 22-06-2021 09:09
Pousuwać białe znaki, wszystko ToLower i wystarczy: return myString.SequenceEqual(myString.Reverse()); Nie potrzeba tej całej ifologi i pętli :)

Krzysztof_Siwiec 29-10-2021 01:34
LINQ :-)


© 2024 - SkillsTest.pl | | Regulamin | Polityka Prywatnosci