영어 사전을 나타내는 단어 목록이 있다고 가정하면 주어진 단어 목록에서 단어의 다른 단어로 한 번에 한 문자씩 만들 수 있는 가장 긴 단어를 찾아야 합니다. 가능한 답변이 두 개 이상인 경우 사전순이 가장 작은 가장 긴 단어를 반환합니다. 응답이 없으면 빈 문자열을 반환합니다.
따라서 입력이 ["h","he","hel","hell", "hello"]와 같으면 출력은 "hello"
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- trie :=새 지도
- insert() 함수를 정의합니다. 말이 필요합니다
- 지금 :=시도
- 단어의 각 c에 대해 수행
- 지금 c가 없다면 -
- 지금[c] ={'#', False}, 그러면
- 지금 :=지금[c]
- 지금['#'] :=사실
- 지금 c가 없다면 -
- search() 함수를 정의합니다. 말이 필요합니다
- 지금 :=시도
- 단어의 각 c에 대해 수행
- 지금은 '#'이고 지금은 아님['#']이 True이면
- 거짓 반환
- 지금 :=지금[c]
- 지금 돌아가기['#']
- 지금은 '#'이고 지금은 아님['#']이 True이면
- 단어의 각 단어에 대해 수행
- 인서트(단어) 호출
- ans :=빈 문자열
- 단어의 각 단어에 대해 수행
- 검색(단어) 및(단어의 크기> ans의 크기 또는 (단어의 크기가 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