Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 사전에서 가장 긴 단어

<시간/>

영어 사전을 나타내는 단어 목록이 있다고 가정하면 주어진 단어 목록에서 단어의 다른 단어로 한 번에 한 문자씩 만들 수 있는 가장 긴 단어를 찾아야 합니다. 가능한 답변이 두 개 이상인 경우 사전순이 가장 작은 가장 긴 단어를 반환합니다. 응답이 없으면 빈 문자열을 반환합니다.

따라서 입력이 ["h","he","hel","hell", "hello"]와 같으면 출력은 "hello"

가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • trie :=새 지도
  • insert() 함수를 정의합니다. 말이 필요합니다
  • 지금 :=시도
  • 단어의 각 c에 대해 수행
    • 지금 c가 없다면 -
      • 지금[c] ={'#', False}, 그러면
    • 지금 :=지금[c]
    • 지금['#'] :=사실
  • search() 함수를 정의합니다. 말이 필요합니다
  • 지금 :=시도
  • 단어의 각 c에 대해 수행
    • 지금은 '#'이고 지금은 아님['#']이 True이면
      • 거짓 반환
    • 지금 :=지금[c]
    • 지금 돌아가기['#']
  • 단어의 각 단어에 대해 수행
    • 인서트(단어) 호출
  • ans :=빈 문자열
  • 단어의 각 단어에 대해 수행
    • 검색(단어) 및(단어의 크기> ans의 크기 또는 (단어의 크기가 ans 및 단어
    • ans :=단어
  • 반환
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    예시

    class Solution:
       def longestWord(self, words):
          self.trie = {}
       def insert(word):
          now = self.trie
          for c in word:
             if c not in now: now[c] = {'#': False}
                now = now[c]
             now['#'] = True
       def search(word):
          now = self.trie
          for c in word:
             if '#' in now and not now['#']: return False
                now = now[c]
             return now['#']
             for word in words:
                insert(word)
             ans = ""
             for word in words:
                if (search(word) and (len(word) > len(ans) or (len(word) == len(ans) and word    < ans))):
             ans = word
          return ans
    ob = Solution()
    print(ob.longestWord(["h","he","hel","hell", "hello"]))

    입력

    ["h","he","hel","hell", "hello"]

    출력

    hello