648. 单词替换

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

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

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

示例 1:

输入:

dict(词典) = ["cat", "bat", "rat"]

sentence(句子) = "the cattle was rattled by the battery"

输出: "the cat was rat by the bat"

注:

输入只包含小写字母。

1 <= 字典单词数 <=1000

1 <= 句中词语数 <= 1000

1 <= 词根长度 <= 100

1 <= 句中词语长度 <= 1000

class Solution {
public String replaceWords(List dict, String sentence) {
Trie trie = new Trie();
for(String word : dict){
trie.insert(word);
}
String[] words = sentence.split(" ");
StringBuilder sb = new StringBuilder();
for(String word : words){
sb.append(trie.change(word)).append(" ");
}
return sb.toString().substring(0,sb.toString().length()-1);
}
}
class Trie{
TrieNode root;
public Trie(){
root = new TrieNode();
}
public void insert(String word){
TrieNode node = root;
for(char c : word.toCharArray()){
if(node.link[c - 'a'] == null){
node.link[c - 'a'] = new TrieNode();
}
node = node.link[c - 'a'];
}
node.isEnd = true;
}
public String change(String word){
StringBuilder sb = new StringBuilder();
TrieNode node = root;
boolean found = false;
for(char c :word.toCharArray()){
if(node.link[c - 'a'] == null){
break;
}
else{
sb.append(c);
node = node.link[c - 'a'];
if(node.isEnd){
return sb.toString();
}
}
}
return word;
}
}
class TrieNode{
TrieNode[] link;
boolean isEnd;
public TrieNode() {
link = new TrieNode[26];
isEnd = false;
}
}

Leetcode 648&period;单词替换

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

Java实现 LeetCode 212 单词搜索 II

public class Find2 { public int[] dx={1,-1,0,0}; public int[] dy={0,0,1,-1}; class Trie{ Trie[] trie ...

HihoCoder1366 逆序单词(字典树)

逆序单词 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在英文中有很多逆序的单词,比如dog和god,evil和live等等. 现在给出一份包含N个单词的单词表,其中每 ...

Java实现 LeetCode 212 单词搜索 II(二)

212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...

hdu2072 单词数 字典树

字典树裸题 #include #include ][]; ]; int cnt; int ans; void Insert(char *w ...

Java实现 LeetCode 720 词典中最长的单词(字典树)

720. 词典中最长的单词 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最 ...

Java实现 LeetCode 820 单词的压缩编码(字典树)

820. 单词的压缩编码 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", & ...

Java实现 LeetCode 139 单词拆分

139. 单词拆分 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可 ...

Java实现 LeetCode 140 单词拆分 II(二)

140. 单词拆分 II 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分 ...

随机推荐

supermap iclient for js 标签专题图(服务端)

Oracle导入中文乱码解决办法

Oracle导入中文乱码解决办法 一.确保各个客户端字符集的编码同服务器字符集编码一致 1-       确定sqlplus字符集编码,如果是windows设置环境变量. 2-       确保Sec ...

PHP 上传图片和安全处理

上传图片 public function images() { $data = $_FILES['file']; switch($data['type']) { case 'image/jpeg': ...

C语言redirection

1)把执行文件xxx.exe 和读取的文件yyy.txt放在一个地方 2)用dos 命令 dir 和cd,打开存放文件的文件夹 3)window 7 情况下 输入xxx.exe 

BZOJ3280&colon; 小R的烦恼

题解: 随便建一下图费用流就可以过吧... 代码: #include #include #include #incl ...

OSI七层模型基础知识及各层常见应用

OSI Open Source Initiative(简称OSI,有译作开放源代码促进会.开放原始码组织)是一个旨在推动开源软件发展的非盈利组织.OSI参考模型(OSI/RM)的全称是开放系统互 ...

golang环境搭建

golang环境搭建 好久没写博客了,最近加班好厉害,加到自己都觉得不太适合这个行业了,每天头都是沉甸甸的,可惜今年注定不是收获的季节. 最近忙里偷闲在学习nodejs,赶巧看到golang的文章,一 ...

自然语言处理NLP快速入门

自然语言处理NLP快速入门 https://mp.weixin.qq.com/s/J-vndnycZgwVrSlDCefHZA [导读]自然语言处理已经成为人工智能领域一个重要的分支,它研究能实现人与 ...

elasticsearch简单操作(二)

让我们建立一个员工目录,假设我们刚好在Megacorp工作,这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录用于促进人文关怀和用于实时协同工作,所以它有以下不同的需求:1.数据能够包含 ...