Я учу себя кодировать с Python и некоторое время я заканчиваю ката (в основном 7 кю) на Codewars. Когда я пытался подняться на уровень после 6 кю ката , насколько я знаю, это было достигнуто:
Завершить функцию, которая принимает строку в качестве входного, и вернуть список всех непарных символов (т. е. они отображаются нечетное количество раз в строке) в том порядке, в котором они были представлены в виде массива.
В случае множественного появления на выбор, возьмите последнее вхождение непарного символа.
Примечания:
Используется широкий диапазон символов, и некоторые из них могут отображаться неправильно в вашем браузере. Ваше решение должно быть линейным с точки зрения длины строки, чтобы пройти последний тест. Примеры:
"Hello World" -> ["H", "e", "", "W", "r", "l", "d"]
" Codewars "-> [" C "," o "," d "," e "," w "," a "," r "," s "]
" woowee "- -> []
"wwoooowweeee" -> []
"racecar" -> ["e"]
"Mamma" -> ["M "]
" Мама "-> [" М "," м "]
Следующие Python 3.6.0 тестовые пробы кода:
def function_name(s):
result = []
lengthS = len(s)
dictResult = {}
for item in s[-1:(-1 * lengthS - 1):-1]:
numLetters = 0
for number in range(lengthS):
if item == s[number]:
numLetters = numLetters + 1
if numLetters % 2 != 0:
dictResult[item] = numLetters
for key in list(dictResult.keys())[-1:(-1 * (len(list(dictResult))) - 1):-1]:
result.append(key)
return result
Сбой при запуске полного цикла тестов из-за:
Тайм-аут выполнения (12000 мс)
Комментирование некоторых частей кода позволяет мне завершить полный цикл тестов быстрее, чтобы я мог видеть, что тесты используют очень длинные строки.
Ясно, что мой код не оптимизирован по производительности. Прочитайте некоторые статьи об алгоритмах, и я подозреваю, что моему коду не хватает производительности из-за для l oop в другой для l oop, что является операцией сложности O (n²). И вот где я застрял на некоторое время. Я не уверен, что это единственный фрагмент кода, который нужно изменить, и если это так - просто не могу понять, как это можно сделать.
Примечание . Пожалуйста, не размещайте ответы с полным решением этой проблемы. Я бы предпочел сам определить окончательный код. Поэтому я был бы рад, если бы вы могли указать на разделы моего кода, которые требуют внимания, с предложениями, примером кода или дополнительным чтением.