zoukankan      html  css  js  c++  java
  • 820. 单词的压缩编码

    给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。

    例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S = "time#bell#" 和 indexes = [0, 2, 5]。

    对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 "#" 结束,来恢复我们之前的单词列表。

    那么成功对给定单词列表进行编码的最小字符串长度是多少呢?

    示例:

    输入: words = ["time", "me", "bell"]
    输出: 10
    说明: S = "time#bell#" , indexes = [0, 2, 5] 。
     

    提示:

    1 <= words.length <= 2000
    1 <= words[i].length <= 7
    每个单词都是小写字母 。

    解:这道题简单的做法是把所有字符存到一个哈希表里,然后遍历每个字符,从第二位开始尝试从哈希表里删除。

    仔细理解这道题,能压缩的字符其实都是另一个字符的后缀,否则无法用下标表示,所以还对倒叙的字符,用字典序排序,再对两边相邻的做判断

    字典树可以了解以下

    class Solution {
    public:
        int minimumLengthEncoding(vector<string>& words) {
            set<string> set_Str;
            for(auto &iter:words)
            {
                set_Str.insert(iter);
            }
    
            for(auto &iter:words)
            {
                for(int i=1;i<iter.size();i++)
                {
                    string tmp=iter.substr(i);
                    set_Str.erase(tmp);
                }
            }
            int i=0;
            for(auto set_iter:set_Str)
            {
                i+=set_iter.size()+1;
            }
            return i;
        }
    };
  • 相关阅读:
    OpenGL编程 基础篇(二)Sierpinski垫片
    PAT1045. Favorite Color Stripe
    OpenGL编程 基础篇(一)
    百练1145:Tree Summing
    百练1745:Divisibility
    百练1321:棋盘问题
    Scrapy架构及其组件之间的交互
    MongoDB快速入门
    Redis快速入门
    Memcache所有方法及参数详解
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/12369139.html
Copyright © 2011-2022 走看看