Един от проблемите е, че " wordToCheck.Length - 1" трябва да е "wordToCheck.Length - pal - 1", но след отстраняването му гърми още един тест.
Открих и другия проблем - добавял съм думата към палиндромите преди да проверя всички букви. Това е коригираното решение на 100%:
http://pastebin.com/iTjc1Q06
Беше интересно как с отстраняването на проблем, броят на грешните отговори се увеличава. :)
Сега остава само някой да отговори на въпроса защо "a" (a single character) е палиндром?
Здравей,
Може да сложиш един break; в if-a, който сетва palindrome променливата на false. Ако един път е сетната false, няма смисъл да продължава да цикли.
Относно защо "a" е палиндром. Обяснението в уикипедия "Палиндромът е една или няколко думи или числа, които се четат по един и същ начин от ляво надясно и от дясно наляво". "а" реално си е дума и се чете по един и същ начин от ляво и от дясно.
Поздрави!
За brake-а съм съгласен, макар това да не се отразява на крайния резултат и на тестовете в Judge.
Не ми беше хрумнало да разглеждам буквите, като думи, тъй като в програмирането разграничаваме между character и string, но явно се приема, че всеки стринг от 1 буква е палиндром.
здравей
брейка ти е оптимизация. Не променя резултата, защото в джъджа няма перформънс тестове. Колкото до а-то, то е стринг съставен от един чар.има разлика.
поздрави
То е малко спорно, дали е оптимизация, тъй като използваното времето и в двата случая е 0.015 s. Може би в програма с повече проверки или по-обемен текст би се усетила разликата.
"a" е палиндром, защото (колкото и странно да изглежда) се пише по един и същи начин отляво-надясно и обратно.
Няма нужда от .DIstinct() и от Array.Sort().
Може вместо List да ползваш SortedSet, (който ти пази само уникални, сортирани елементи) и този прост O(n) алгоритъм за намирането на палиндроми:
private static bool IsPalindrome(string word)
{
int rightIndex = word.Length - 1;
int leftIndex = 0;
while (rightIndex >= leftIndex)
{
if (word[rightIndex] != word[leftIndex])
{
return false;
}
rightIndex--;
leftIndex++;
}
return true;
}
Още съм в Programming Basics и не съм чувал за SortedSet. :)
Щом чаткаш List, значи чаткаш и SortedSet - представи си го като List, в който не можеш да вкараш два едни и същи елемента и освен това ти ги пази в нарастващ ред, т.е., ако се опиташ да му вкараш поредицата 5,3,5,6,7,7,9,1, в SortedSet-а ще получиш:
1, 3, 5, 6, 7, 9
Ясно. По-трудно е да се сетиш за него, когато ти потрябва, отколкото да го разбереш.