Поиск слова минимальной длины в заданной строке

Вот постановка задачи с платформы кодирования:

Учитывая строку S (которая может содержать несколько слов), вам нужно найти слово минимальной длины. Примечание. Если несколько слов имеют одинаковую длину, ответом будет первое слово минимальной длины в строке. Слова разделяются только одним пробелом. Ограничения: 1 <= Длина строки S <= 10^5

Я знаю эффективное решение, но это то, что я попробовал в своей первой попытке -

string = input().strip()
n=len(string)
words=string.split()
dic = {}
for word in words:
    dic[word]=len(word)
word = ""
if n!=0:
    mini = len(words[0])
    word=words[0]
    for wordss in dic:
        if (dic[wordss]<mini):
            word = wordss
            mini = dic[wordss]
print(word)

Проблема в том, что он проходит только 2 из 5 тестовых случаев, которые скрыты (мне недоступны). Я не совсем уверен в проблеме этого подхода. Какие крайние случаи я упускаю?

Какова цель словаря dic? Его элементы могут быть не упорядочены по вставке в старых версиях Python, не так ли?

Stas Simonov 13.08.2024 18:45

Какую версию Python вы используете? Одной из проблем может быть порядок итерации словаря. Начиная с Python 3.7, это гарантированный порядок вставки. Если порядок итерации не является порядком вставки, не гарантируется, что вы вернете первое слово минимальной длины.

Mushroomator 13.08.2024 18:45

Это не говорит вам, почему тестовые примеры провалились, верно? Это может быть просто TLE, если оценщик очень строгий. Хеширование занимает некоторое время.

Andrew Yim 13.08.2024 18:59

Чтобы решить эту проблему, вам не нужно разбивать строку. Просто перебирайте строку, находя расстояние между последовательными пробелами.

lastchance 13.08.2024 19:39

ваше решение не работает в случае, когда строка очень длинная, 10 ^ 5 - очень длинная строка, и ваше решение просто неэффективно и достигает ограничения по времени выполнения.

Pythonizer 13.08.2024 23:13

Не отмечайте это как dsa. Тег dsa предназначен для Digital Signature Algorithm.

PaulMcKenzie 14.08.2024 00:43

Спасибо за материалы. Вероятно, это TLE (возможно, мне придется проверить версию Python, которую они использовали).

Abhinav Tahlani 14.08.2024 13:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

когда вы повторяете dic в python, он не возвращает ключи и значения в том же порядке, в котором вы добавляете ключ и значения в dic. так например: строка = книга, он, она, кто ключ возврата из вашего кода может быть do, он или она но правильный ответ - первый с минимальной длиной.

На самом деле этот ответ неверен/отсутствует важная информация. Порядок итерации гарантированно является порядком вставки для Python 3.7+. Кроме того, второе предложение не имеет особого смысла. Пожалуйста, обновите свой ответ.

Mushroomator 13.08.2024 18:47
Ответ принят как подходящий

Зачем вообще заморачиваться со словарем? Вы можете просто найти минимум по ходу дела.

string = input().strip()
minlen = len( string ) + 1
bestword = ""
for word in string.split():
    L = len( word )
    if L < minlen:
        minlen = L
        bestword = word
print( bestword )

Пример:

Three blind mice see how they run
see

Спасибо. Мне известны эффективные решения этой проблемы, но я не был уверен, почему получаю ошибки при использовании словаря для этой проблемы. Я использовал два списка: один для хранения слов, а другой для хранения их длины. Использование min() и index() вернуло мне первое слово минимальной длины.

Abhinav Tahlani 14.08.2024 13:25

Другие вопросы по теме

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

Как обобщить функцию подгонки, чтобы позволить подгонке кривой sciPy определить количество входных данных
Наследование классов, где дочерними элементами являются простые классы, состоящие только из переменных
Pytorch — RuntimeError: ожидалось, что все тензоры будут на одном устройстве, но обнаружено как минимум два устройства: процессор и cuda:0
Получите логическое выражение из иерархического DataFrame Pandas
Правильное использование MPI с многопоточными функциями NumPy
Как получить значение указанного индексного номера в результате сортировки столбца и заполнить его нулевым значением, если оно отсутствует?
Почему при нажатии мыши на экране не появляются крестики?
Ошибка в cv2.rectangle после переворота изображения с нарезкой: «Макет выходного массива img несовместим с cv::Mat»
Python, elif вызвал проблему, а остальное - нет
Алгоритм не может найти изображения