820. 单词的压缩编码
2021/7/22 6:08:17
本文主要是介绍820. 单词的压缩编码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目描述
单词数组 words 的 有效编码 由任意助记字符串 s 和下标数组 indices 组成,且满足:
words.length == indices.length
助记字符串 s 以 '#' 字符结尾
对于每个下标 indices[i] ,s 的一个从 indices[i] 开始、到下一个 '#' 字符结束(但不包括 '#')的 子字符串 恰好与 words[i] 相等
给你一个单词数组 words ,返回成功对 words 进行编码的最小助记字符串 s 的长度 。
- 示例
输入:words = ["time", "me", "bell"] 输出:10 解释:一组有效编码为 s = "time#bell#" 和 indices = [0, 2, 5] 。 words[0] = "time" ,s 开始于 indices[0] = 0 到下一个 '#' 结束的子字符串,如加粗部分所示 "time#bell#" words[1] = "me" ,s 开始于 indices[1] = 2 到下一个 '#' 结束的子字符串,如加粗部分所示 "time#bell#" words[2] = "bell" ,s 开始于 indices[2] = 5 到下一个 '#' 结束的子字符串,如加粗部分所示 "time#bell#"
解决方案
class TrieNode { public: TrieNode() { for (int i=0;i<26;i++) { children[i]=nullptr; } end=false; } bool containsKey(char ch) { return children[ch-'a']!=nullptr; } void put(char ch, TrieNode*node) { children[ch-'a']=node; } TrieNode* get(char ch) { return children[ch-'a']; } void setEnd() { end=true; } bool isEnd() { return end; } private: bool end; TrieNode *children[26]; }; class Trie { public: Trie() { root=new TrieNode(); } void insert(string word) { TrieNode *node=root; for (char ch:word) { if (!node->containsKey(ch)) { node->put(ch, new TrieNode()); } node=node->get(ch); } node->setEnd(); } private: TrieNode *root; }; class Solution { public: int minimumLengthEncoding(vector<string>& words) { int ans=0; Trie *trie=new Trie(); for (auto &word:words) { word.reserve(); trie->insert(word); } } };
这篇关于820. 单词的压缩编码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19JAVA分布式id教程:轻松入门与实践
- 2024-11-19Java高并发教程:入门与实践指南
- 2024-11-19JAVA高并发直播教程:新手入门指南
- 2024-11-19Java高并发直播教程:入门与实践指南
- 2024-11-19Java微服务教程:初学者快速入门指南
- 2024-11-19JAVA微服务教程:新手入门的详细指南
- 2024-11-19Java微服务教程:从零开始搭建你的第一个微服务应用
- 2024-11-19Java项目开发教程:初学者必备指南
- 2024-11-19Java项目开发教程:新手快速入门指南
- 2024-11-19Java项目开发教程:零基础入门到实战