Created
June 7, 2024 18:04
-
-
Save shanecandoit/04ff0b90e4064ef6e947ed5e81b7bce1 to your computer and use it in GitHub Desktop.
leetcode 648 replace words
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
https://leetcode.com/problems/replace-words/submissions/1280805154/?envType=daily-question&envId=2024-06-07 | |
648. Replace Words | |
Medium | |
Topics | |
Companies | |
In English, we have a concept called root, which can be followed by some other word to form another longer word - let's call this word derivative. For example, when the root "help" is followed by the word "ful", we can form a derivative "helpful". | |
Given a dictionary consisting of many roots and a sentence consisting of words separated by spaces, replace all the derivatives in the sentence with the root forming it. If a derivative can be replaced by more than one root, replace it with the root that has the shortest length. | |
Return the sentence after the replacement. | |
Example 1: | |
Input: dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery" | |
Output: "the cat was rat by the bat" | |
Example 2: | |
Input: dictionary = ["a","b","c"], sentence = "aadsfasf absbs bbab cadsfafs" | |
Output: "a a b c" | |
Constraints: | |
1 <= dictionary.length <= 1000 | |
1 <= dictionary[i].length <= 100 | |
dictionary[i] consists of only lower-case letters. | |
1 <= sentence.length <= 106 | |
sentence consists of only lower-case letters and spaces. | |
The number of words in sentence is in the range [1, 1000] | |
The length of each word in sentence is in the range [1, 1000] | |
Every two consecutive words in sentence will be separated by exactly one space. | |
sentence does not have leading or trailing spaces. | |
""" | |
from typing import List | |
class Solution: | |
def replaceWords(self, dictionary: List[str], sentence: str) -> str: | |
trie = {} | |
for word in dictionary: | |
node = trie | |
for ch in word: | |
if ch not in node: | |
node[ch] = {} | |
node = node[ch] | |
node['#'] = word | |
def search(word): | |
node = trie | |
for i, ch in enumerate(word): | |
if ch not in node: | |
return word | |
node = node[ch] | |
if '#' in node: | |
return node['#'] | |
return word | |
return ' '.join(search(word) for word in sentence.split()) | |
assert Solution().replaceWords(["cat","bat","rat"], "the cattle was rattled by the battery") == "the cat was rat by the bat" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment