ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode 替换单词

2021-11-29 16:01:18  阅读:201  来源: 互联网

标签:cur dictionary sentence 示例 替换 单词 词根 leetcode


剑指 Offer II 063. 替换单词

Difficulty: **在英语中,有一个叫做 词根(root) 的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。 现在,给定一个由许多词根组成的词典和一个句子,需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。 需要输出替换之后的句子。   示例 1: 输入:dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery" 输出:"the cat was rat by the bat" 示例 2: 输入:dictionary = ["a","b","c"], sentence = "aadsfasf absbs bbab cadsfafs" 输出:"a a b c" 示例 3: 输入:dictionary = ["a", "aa", "aaa", "aaaa"], sentence = "a aa a aaaa aaa aaa aaa aaaaaa bbb baba ababa" 输出:"a a a a a a a a bbb baba a" 示例 4: 输入:dictionary = ["catt","cat","bat","rat"], sentence = "the cattle was rattled by the battery" 输出:"the cat was rat by the bat" 示例 5: 输入:dictionary = ["ac","ab"], sentence = "it is abnormal that this solution is accepted" 输出:"it is ab that this solution is ac"   提示: 1 <= dictionary.length <= 1000 1 <= dictionary[i].length <= 100 dictionary[i] 仅由小写字母组成。 1 <= sentence.length <= 10^6 sentence 仅由小写字母和空格组成。 sentence 中单词的总量在范围 [1, 1000] 内。 sentence 中每个单词的长度在范围 [1, 1000] 内。 sentence 中单词之间由一个空格隔开。 sentence 没有前导或尾随空格。   注意:本题与主站 648 题相同: https://leetcode-cn.com/problems/replace-words/ **

在英语中,有一个叫做 词根(root) 的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。

现在,给定一个由许多词根组成的词典和一个句子,需要将句子中的所有继承词词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。

需要输出替换之后的句子。

示例 1:

输入:dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery"
输出:"the cat was rat by the bat"

示例 2:

输入:dictionary = ["a","b","c"], sentence = "aadsfasf absbs bbab cadsfafs"
输出:"a a b c"

示例 3:

输入:dictionary = ["a", "aa", "aaa", "aaaa"], sentence = "a aa a aaaa aaa aaa aaa aaaaaa bbb baba ababa"
输出:"a a a a a a a a bbb baba a"

示例 4:

输入:dictionary = ["catt","cat","bat","rat"], sentence = "the cattle was rattled by the battery"
输出:"the cat was rat by the bat"

示例 5:

输入:dictionary = ["ac","ab"], sentence = "it is abnormal that this solution is accepted"
输出:"it is ab that this solution is ac"

提示:

  • 1 <= dictionary.length <= 1000
  • 1 <= dictionary[i].length <= 100
  • dictionary[i] 仅由小写字母组成。
  • 1 <= sentence.length <= 10^6
  • sentence 仅由小写字母和空格组成。
  • sentence 中单词的总量在范围 [1, 1000] 内。
  • sentence 中每个单词的长度在范围 [1, 1000] 内。
  • sentence 中单词之间由一个空格隔开。
  • sentence 没有前导或尾随空格。

注意:本题与主站 648 题相同:

Solution

Language: ****

type Node struct {
    child [26]*Node 
    isWord bool
}

func New() *Node {
    return &Node {
        child: [26]*Node{},
        isWord: false,
    }
}

func (node *Node) Insert(word string) {
    var cur = node 
    for _,c := range word  {
        if cur.child[c-'a'] == nil {
            cur.child[c-'a'] = New()
        }
        cur =  cur.child[c-'a' ]
    }
    cur.isWord= true
}
func (node *Node ) GetPrefix(word string) string {
    var cur = node 
    var res strings.Builder
    for _,c := range word {
        var i = c-'a'
        if cur.child[i] == nil {
            return word
        }
        res.WriteRune(c)
        cur = cur.child[i]
        if cur.isWord {
            return res.String()
        }

    }
    return word
}





func replaceWords(dictionary []string, sentence string) string {
    var root = New()
    for _, w := range dictionary {
        root.Insert(w)
    }
    var result = strings.Fields(sentence)
    for i:=0;i<len(result) ; i++ {
        result[i] = root.GetPrefix(result[i])
    } 
    return strings.Join(result," ")



}
​

标签:cur,dictionary,sentence,示例,替换,单词,词根,leetcode
来源: https://www.cnblogs.com/lyr-2000/p/15619832.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有