## 原題#

In English, we have a concept called root, which can be followed by some other words to form another longer word - let’s call this word successor. For example, the root an, followed by other, which can form another word another.

Now, given a dictionary consisting of many roots and a sentence. You need to replace all the successor in the sentence with the root forming it. If a successor has many roots can form it, replace it with the root with the shortest length.

You need to output the sentence after the replacement.

Example 1:

``````Input: dict = ["cat", "bat", "rat"]
sentence = "the cattle was rattled by the battery"
Output: "the cat was rat by the bat"
``````

Note:

• The input will only have lower-case letters
• 1 <= dict words number <= 1000
• 1 <= sentence words number <= 1000
• 1 <= root length <= 100
• 1 <= sentence words length <= 1000

## 分析#

1. 根據空格將句子分離為一個單詞數組
2. 將單詞逐個尋找其 root，有則替換，無則忽略
3. 將替換後的單詞數組，用空格拼接成新句子返回

## 實現#

`````` 1func replaceWords(dict []string, sentence string) string {
2    words := strings.Split(sentence, " ")
3
4    for i := 0; i < len(words); i++ {
5        for _, v := range dict {
6            if len(words[i]) >= len(v) && words[i][:len(v)] == v {
7                // in order to find the shortest root, doesn't break on here
8                words[i] = v
9            }
10        }
11    }
12
13    return strings.Join(words, " ")
14}
``````