首页 > 其他 > 详细

820-单词压缩

时间:2020-03-29 00:28:35      阅读:62      评论:0      收藏:0      [点我收藏+]

思路:如果X是Y的后缀,那么X就可以删掉,生成的字符长度最短就不需要Y,由数据范围可知一个单词最多含有 7 个后缀,所以我们可以枚举单词所有的后缀。对于每个后缀,如果其存在 words 列表中,我们就将其从列表中删除。为了高效删除,我们将 words 用哈希集合(HashSet)来存储。

个人刚开始设计的思路:用map存储<单词,单词长度>然后将map按照单词长度值从大到小排序。然后用双指针进行二重双循环,找到有后缀相同的删掉(复杂度较大),单词长的排前面主要是因为肯定会包括后面短的单词。最后统计长度在进行相加。和官方给的思路相比还是有点差距的。

明天开始整理面试内容和C++新特性用法,这几天敲代码发现用新特性速度都快了不少,所以明天开始恢复更新速度了哦。

技术分享图片
 1 class Solution {
 2 public:
 3     int minimumLengthEncoding(vector<string>& words) {
 4         unordered_set<string> good(words.begin(), words.end());
 5         for (const string& word: words) {
 6             for (int k = 1; k < word.size(); ++k) {
 7                 good.erase(word.substr(k));
 8             }
 9         }
10 
11         int ans = 0;
12         for (const string& word: good) {
13             ans += word.size() + 1;
14         }
15         return ans;
16     }
17 };
View Code

 

820-单词压缩

原文:https://www.cnblogs.com/nxnslc-blog/p/12590189.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!