Код работает, но превышен лимит времени выполнения
я прохожу обучение программированию Python на одном из он-лайн источников. Необходимо было решить следующую задачу: На вход подается строка. Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки. Для каждого слова из этого текста подсчитайте, сколько раз оно встречалось в этом тексте ранее.
Для примера:
Ввод
one two one tho three
Результат
0 0 1 0 0
Я написала код, всячески проверила его, даже на очень большом случайном массиве данных. Все работает, считается быстро. Однако, при загрузке его в тестирующую систему, они мне его не засчитывают за решение, выдают ошибку "Превышен лимит времени". Ниже выкладываю свой код. Пожалуйста, подскажите, какой его кусок и как можно оптимизировать, чтобы увеличить быстродействие:
string = str(input())
z1 = []
string.split()
new_string = ' '.join(string.split())
new_string1 = new_string.replace('\\', ' ')
workingList = list(new_string1.split())
def cntsubs(x, List):
if x in List:
return List.count(x)
else:
return '0'
for a in range(0, len(workingList)):
a = workingList[-1]
workingList.pop()
x = str(cntsubs(a, workingList))
z1.append(x)
print(*z1[::-1])
Ответы (1 шт):
можно использовать слови для ускорения работы:
string = "one two one tho three"
words = string.split()
counts = dict()
for word in words:
if word != []: # не анализируем слова нулевого размера (могли появиться если между словами было больше одного пробела
count = counts.get(word, 0) # получаем счетчик для текущего слова, если в словаре не было такой записи, то получаем 0
print(count, end=' ')
counts[word] = count + 1 # увеличиваем счётчик для текущего слова
ну или так, если будет сравниваться строка:
words = string.split()
counts = dict()
res = []
for word in words:
if word != []:
count = counts.get(word, 0)
res.append(count)
counts[word] = count + 1
print(*res)
Касательно вашего кода:
не надо переводить выход
input()в строку -input()и так всегда возвращает строкувы как-то странно разрываете строку на слова, если уж на то пошло, то всегда можно заменить небуквенные символы на пробелы и потом разорвать строку на слова
например:
string = "one two one \ntho;three"
string_updated = ''.join(i if i.isalpha() else ' ' for i in string)
print(string_updated)