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 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:

  1. The input will only have lower-case letters.
  2. 1 <= dict words number <= 1000
  3. 1 <= sentence words number <= 1000
  4. 1 <= root length <= 100
  5. 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;
}
};

最新文章

  1. 数据库 数据库SQL语句二
  2. 多对多关系&lt;EntityFramework6.0&gt;
  3. Android—实现自定义相机倒计时拍照
  4. java实现Haffman编码
  5. mysqli扩展库的预处理技术 mysqli stmt
  6. 笔记:ASP.NET MVC安全
  7. 慧自文档:代替 Everything 来快速查找文件的,实现文件显示在文件夹的层次结构中
  8. php 微信开发之 微信支付 V3 开发 -CURLOP_TIMEOUT问题
  9. Eclipse配置不同JDK版本遇到的一些问题与总结
  10. 机器时代的中国字幕(Automata.2014.720p.WEB-DL.DD5.1.H264-RARBG.srt)
  11. 多表链接 Left join
  12. vue 存取、设置、清除cookie
  13. CentOS 7 minimal网络配置
  14. CentOS7配置MySQL5.7主备
  15. PHP,PSR开发规范
  16. Windows10开发手记-Windows App Certification Kit使用教程
  17. [转]Bootstrap table 分页 In asp.net MVC
  18. Maven学习(一)概念简述和安装教程
  19. 项目抛弃Tomcat容器,用代码启动Tomcat插件
  20. flume使用之exec source收集各端数据汇总到另外一台服务器

热门文章

  1. JS 语言基础
  2. ubuntu 14.04 安装tomcat服务器 配置图片路径和文件路径
  3. robotframework接口测试实例
  4. python爬虫---实现项目(四) 用BeautifulSoup分析新浪新闻数据
  5. python之道04
  6. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
  7. Bootstrap 网页乱码
  8. Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
  9. shell脚本,如何用shell打印金字塔
  10. java在线聊天项目1.2版 ——开启多个客户端,分别实现数据库注册和登录功能后,成功登陆则登录框消失,好友列表窗出现