Как найти самое длинное слово в строке без использования метода разделения

Мне нужен алгоритм, который может найти самое длинное слово в строке, я не могу использовать split(), единственная предопределенная функция, которую я могу использовать, это find(), и я не думаю, что это полезно для этого решения.

Это то, что мне удалось сделать до сих пор:

ch=input("donner: ")

def plus_long(ch):
    p=ch.find(" ")
    if p==-1:
        return ch
    maximum = ""
    mot = ""
    while p!=-1:
        mot=ch[:p]
        print(mot)
        ch=ch[p+1:]
        print(ch)
        if len(mot)>len(maximum):
            maximum=mot
        p=ch.find(" ")
        
    return maximum

print("maximum est: ",plus_long(ch))

Но этот не проверяет последнее слово, потому что больше нет пробелов.

Обновлено: Спасибо всем за ответы, сегодня утром я понял, как решить эту проблему, поместив ch в новую переменную и сравнив ее с максимальной, и это сработало.

   ch=input("donner: ")
def plus_long(ch):
    p=ch.find(" ")
    if p==-1:
        return ch
    maximum = ""
    mot = ""
    while p!=-1:
        mot=ch[:p]
        print(mot)
        ch=ch[p+1:len(ch)]
        print(ch)
        if len(mot)>len(maximum):
            maximum=mot
        p=ch.find(" ")
    f=ch
    if len(f)>len(maximum):
        maximum=f
    return maximum
print("maximum est: ",plus_long(ch))
    

1. Не называйте переменные на французском языке. 2. Почему нельзя использовать сплит?

USERNAME GOES HERE 09.12.2020 21:12

Извините за французские переменные, и учитель сказал нам не использовать разделение 🤷🏻

Firas Chebil 09.12.2020 22:19

Затем используйте ch.replace(' ', '\n').splitlines() :-P

superb rain 09.12.2020 22:40

Отвечает ли это на ваш вопрос? Python: Найдите самое длинное слово в строке

Georgy 09.12.2020 22:56
Почему в 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
4
955
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вы можете найти с помощью split и len:

# Longest word

# Reading sentence from user

sentence = input("Enter sentence: ")

# Finding longest word
longest = max(sentence.split(), key=len)

# Displaying longest word
print("Longest word is: ", longest)
print("And its length is: ", len(longest))

Результат:

Enter sentence: Tongue tied and twisted just an earth bound misfit I
Longest word is:  twisted
And its length is:  7

ОП говорит i can't use split(). По-моему, это домашнее задание.

Random Davis 09.12.2020 21:13
ch=input("donner: ")

def plus_long(ch):
    word = ''
    maximum = ''
    for letter in ch:
        if letter == ' ':
            if len(maximum) < len(word):
                maximum = word
            word = ''
        else:
            word += letter
        
    return maximum


print("maximum est: ",plus_long(ch))

Это не возвращает слово максимальной длины и не решает проблему OP, заключающуюся в том, что последнее слово не возвращается, если оно самое длинное.

blhsing 09.12.2020 21:26

Вы можете установить p на None, если метод find возвращает -1, чтобы ch[:p] разрезал остальную часть строки, чтобы получить последнее слово:

def plus_long(ch):
    maximum = ""
    while True:
        p = ch.find(" ")
        if p == -1:
            p = None
        mot = ch[:p]
        if len(mot) > len(maximum):
            maximum = mot
        if p is None:
            break
        ch = ch[p + 1:]
    return maximum

Использование find

def plus_long(ch):
  longest = ""
  i = 0
  while i < len(ch):
    n = ch.find(" ", i)
    if n == -1:
      n = len(ch)

    if len(longest) < len(ch[i:n]):
      longest = ch[i:n]

    i = n+1

Тест:

print (plus_long("there is a cat on a very big banana tree"))
print (plus_long("there is a cat on a mountain"))
print (plus_long("there"))

Выход:

banana
mountain
there
Ответ принят как подходящий

Я разделил эту проблему на две части:

  1. Используйте find, чтобы создать список слов.

  2. Найдите самое длинное слово в списке.

def plus_long(ch):

    letters = "abcdefghijklmnopqrstuvwxyz"
    words = ['']
    for v in ch:
        if letters.find(v.lower()) != -1: # Use find to check if the character is part of the alphabet
            words[-1] += v # If so, add that character to the last string in the list
        else:
            words.append('') # Else, start a new string

    result = "" # Check which string is the longest
    for word in words:
        if len(word) > len(result):
            result = word

    return result

Тест:

>>> plus_long("Hello!!!!!!!!!!! How are you? I am exhausted.")

Выход:

'exhausted'

Я вижу, что в других ответах не учитываются знаки препинания, поэтому, используя их функции, результатом будет 'Hello!!!!!!!!!!!'.

это очень длинный и, вероятно, худший метод в отношении нотации большой буквы «О», но это простой подход для начинающих.

def longWord (sentence):
    singleWord = ""
    words = []
    for letter in sentence:
        
        if letter != " ":
            singleWord += letter
        else:
            words += [singleWord]
            singleWord = ""
    words += [singleWord]
    
    for i in range(len(words)-1):
        biggestWord = ""
        if len(words[i]) >= len(words[i+1]):
            biggestWord += words[i]
            
        else:
            biggestWord += words[i+1]
    
    print(words)
    print(biggestWord)
    
longWord("This is a callback")

ВЫХОД -

['This', 'is', 'a', 'callback']
callback

Я знаю, что у вас уже есть несколько ответов. Вот код с O(1)

ch=input("donner: ")
prev_pos = 0
max_word = ''
for i, sp in enumerate(ch):
    if sp == ' ':
        if len(ch[prev_pos:i]) > len(max_word): max_word = ch[prev_pos:i]
        prev_pos = i+1
if len(ch[prev_pos:]) > len(max_word): max_word = ch[prev_pos:]
print ('longest word :', max_word, 'length :', len(max_word))

Выход для этого:

donner: sentence
longest word : sentence length : 8

donner: this sentence
longest word : sentence length : 8

donner: this is a sentence
longest word : sentence length : 8

donner: this sentence is expectedly very lengthy
longest word : expectedly length : 10

donner: word is lengthy
longest word : lengthy length : 7

Я также хотел дать вам альтернативный подход. Я добавил комментарии, чтобы вы поняли код

ch=input("donner: ")             #input the sentence
word = ''                        #capture each word in this variable
wd = []                          #store all the words into this list
for sp in ch:                    #iterate thru the string
    if sp != ' ': word += sp     #concat to create the word
    else:
        wd.append(word)          #add the word to list
        word = ''                #reset word
wd.append(word)                  #add the last word to the list
long_word = max(wd,key=len)      #find the longest word
print ('longest word :',long_word, 'length :', len(long_word))

Вот ваш код с дополнением, которое проверяет последнее слово (len), когда p == -1 как раз перед выходом из цикла. Это дополнение сообщало правильную максимальную длину, если последнее слово больше максимального.

ch=input("donner: ")

def plus_long(ch):
    p=ch.find(" ")
    if p==-1:
        return ch
    maximum = ""
    mot = ""
    while p!=-1:
        mot=ch[:p]
        print(mot)
        ch=ch[p+1:]
        print(ch)
        if len(mot)>len(maximum):
            maximum=mot
        p=ch.find(" ")

        # 'ch' now has the last word in a sentence
        # it needs to be checked against 'maximum'
        if p == -1:
            if len(ch) > len(maximum):
                maximum = ch
            
        
    return maximum

print("maximum est: ",plus_long(ch))

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