力扣第820题 单词的压缩编码

力扣第820题 单词的压缩编码

class TrieNode
    {
public:
	map<char, TrieNode*> children;
};
class Solution {
public:
    void GetNum(TrieNode * node, int num, int& count)
    {
        if (node == NULL || node->children.size() == 0)
        {
            count += num + 1;
            return;
        }
        for (map<char, TrieNode*>::iterator itor = node->children.begin(); itor != node->children.end(); itor++)
        {
            GetNum(itor->second, 1 + num, count );
        }
    }

    int minimumLengthEncoding(vector<string>& words)
    {
        TrieNode* root = new TrieNode();
        TrieNode* temp;
        for (string s : words)
        {
            temp = root;
            for (int i = s.size() - 1; i >= 0; i--)
            {
                if (temp->children[s[i]] == NULL)
                {
                    temp->children[s[i]] = new TrieNode();
                }
                temp = temp->children[s[i]];
            }
        }
        int count = 0;
        GetNum(root, 0, count);
        return count;
    }

};

原文地址:https://www.cnblogs.com/woodjay/p/12601358.html

时间: 2024-11-06 07:20:10

力扣第820题 单词的压缩编码的相关文章

力扣第70题:爬楼梯

力扣第70题:爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶. 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶. 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶 ? int climbStairs(int n) { if (n <= 1) { re

力扣第95题 不同的二叉搜索树II

力扣第95题 不同的二叉搜索树II 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; vector<TreeNode*> generateTree(int start, int end) { vector<TreeNode*> v

力扣第452题 用最少数量的箭引爆气球

力扣第452题 用最少数量的箭引爆气球 class Solution { public: int findMinArrowShots(vector<vector<int>>& points) { int len = points.size(); if (len == 0) { return 0; } sort(points.begin(), points.end(), [](const vector<int> &pl1, const vector<

力扣第136题 只出现一次的数

力扣第136题 只出现一次的数 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 class Solution { public: int singleNumber(vector<int>& nums) { int len = nums.size(); fo

力扣第260题 只出现一次的数字 III

力扣第260题 只出现一次的数字 III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案. 你的算法应该具有线性时间复杂度.你能否仅使用常数空间复杂度来实现? class Solution { public: vector<int> singleNumber(vector<int&

力扣第1013题 将数组分成和相等的三部分

力扣第1013题 将数组分成和相等的三部分 class Solution { public: bool canThreePartsEqualSum(vector<int>& A) { int sum = accumulate(A.begin(), A.end(), 0); if (sum % 3 != 0) return false; int temp = sum / 3; int len = A.size(); int left = 0, right = len - 1; int l

力扣第300题 最长上升子序列

力扣第300题 最长上升子序列 class Solution { public: int lengthOfLIS(vector<int>& nums) { int size = nums.size(); if (size == 0) { return 0; } vector<int> vec; int len = 1; vec.push_back(nums[0]); for (int i = 1; i < size; i++) { if (vec[len - 1] &

力扣第887题 鸡蛋掉落

力扣第887题 鸡蛋掉落 class Solution { public: int superEggDrop(int K, int N) { vector<vector<int>> dp(K+1, vector<int>(N+1, 0)); int m = 0; for (; dp[K][m] < N;) { m++; for (int k = 1; k <= K; k++) dp[k][m] = 1 + dp[k-1][m-1] + dp[k][m-1];

刷题57—单词的压缩编码

94.单词的压缩编码 题目链接 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/short-encoding-of-words 题目描述 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S = "time#bell#" 和 indexes = [0, 2