@CallMeYourDaddy

Как оптимизировать алгоритм нахождения палиндрома?

Как оптимизировать данный алгоритм?
public void checkPalindrome(string number)
        {
            string value1 = null;
            string value2 = null;

            for (int i = 0; i < number.Length; i++)
            {
                value1 += number[i];
                
            }

            for(int q = number.Length; q > 0; q--)
            {
                value2 += number[q - 1];
            }


            string result = value1 == value2 ? "Yes, it's a Palindrome" : "No, it's not a Palindrome";
            Console.WriteLine(result);
        }
  • Вопрос задан
  • 93 просмотра
Решения вопроса 2
bingo347
@bingo347
Crazy on performance...
Достаточно проходить до половины строки, сравнивая начальные символы с конечными и завершая проверку при первой неудаче:
public void checkPalindrome(string input)
{
    string result = isPolindrome(input) ? "Yes, it's a Palindrome" : "No, it's not a Palindrome";
    Console.WriteLine(result);
}

private bool isPolindrome(string input)
{
    int halfLength = input.Length / 2;
    for (int i = 0; i < halfLength; i++)
    {
        if (input[i] != input[input.Length - i - 1])
            return false;
    }
    return true;
}
так получим наилучшую возможную сложность O(n / 2) и Ω(1)
Ответ написан
Комментировать
public bool IsPalindrome(string number)
{
    for (int i = 0, j = number.Length - 1; i < number.Length / 2; i++, j--)
        if (number[i] != number[j])
            return false;
    return true;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы