648. Replace Words
Problem statement
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 wordsuccessor
. For example, the rootan
, followed byother
, which can form another wordanother
.Now, given a dictionary consisting of many roots and a sentence. You need to replace all the
successor
in the sentence with theroot
forming it. If asuccessor
has manyroots
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
Solution
Although this is the fourth problem of leetcode weekly contest 42, the solution is pretty straightforward.
The best solution should employ the trie tree, by now, I have no idea of that. Alternatively, I add all root words into a hash table and search by the key value.
The general idea:
- Add all roots into hash table.
- Separate the strings into single word.
- Search from the start of each word to find if root exists in hash table.
Time complexity is O(n), n is the size of setence, space complexity is O(n + m), m is the size of root.
class Solution {
public:
string replaceWords(vector<string>& dict, string sentence) {
// add the dict into a set to search
set<string> ht;
for(auto dic : dict){
ht.insert(dic);
}
// partition the sentences into words
vector<string> words;
for(int i = , j = ; i < sentence.size() && j <= sentence.size(); j++){
if(sentence[j] == ' ' || j == sentence.size()){
words.push_back(sentence.substr(i, j - i));
i = j + ;
}
}
// find root in dictionary
for(int i = ; i < words.size(); i++){
for(int j = ; j < words[i].size(); j++){
if(ht.find(words[i].substr(, j + )) != ht.end()){
words[i] = words[i].substr(, j + );
break;
}
}
}
// build the whole sentence
string ans = words[];
for(int i = ; i < words.size(); i++){
ans += " " + words[i];
}
return ans;
}
};
最新文章
- 数据库 数据库SQL语句二
- 多对多关系<;EntityFramework6.0>;
- Android—实现自定义相机倒计时拍照
- java实现Haffman编码
- mysqli扩展库的预处理技术 mysqli stmt
- 笔记:ASP.NET MVC安全
- 慧自文档:代替 Everything 来快速查找文件的,实现文件显示在文件夹的层次结构中
- php 微信开发之 微信支付 V3 开发 -CURLOP_TIMEOUT问题
- Eclipse配置不同JDK版本遇到的一些问题与总结
- 机器时代的中国字幕(Automata.2014.720p.WEB-DL.DD5.1.H264-RARBG.srt)
- 多表链接 Left join
- vue 存取、设置、清除cookie
- CentOS 7 minimal网络配置
- CentOS7配置MySQL5.7主备
- PHP,PSR开发规范
- Windows10开发手记-Windows App Certification Kit使用教程
- [转]Bootstrap table 分页 In asp.net MVC
- Maven学习(一)概念简述和安装教程
- 项目抛弃Tomcat容器,用代码启动Tomcat插件
- flume使用之exec source收集各端数据汇总到另外一台服务器
热门文章
- JS 语言基础
- ubuntu 14.04 安装tomcat服务器 配置图片路径和文件路径
- robotframework接口测试实例
- python爬虫---实现项目(四) 用BeautifulSoup分析新浪新闻数据
- python之道04
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
- Bootstrap 网页乱码
- Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
- shell脚本,如何用shell打印金字塔
- java在线聊天项目1.2版 ——开启多个客户端,分别实现数据库注册和登录功能后,成功登陆则登录框消失,好友列表窗出现