200330题(820.单词的压缩编码(字典树))

2023-11-30 09:08

本文主要是介绍200330题(820.单词的压缩编码(字典树)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
从0位置开始遍历字符串S,遇到#停止,得到time 从2位置开始遍历字符串S,遇到#停止,得到me 从5位置开始遍历字符串S,遇到#停止,得到bell.

字典树的建立详见实现 Trie (前缀树、字典树)

法1思路:字典树:根据列表中单词的长度由长到短进行排序,排好序后对每个单词反转顺序,最后再插入字典树,插入时通过标志位isNew判断是否为新单词即可。

class Trie {
private:bool isEnd;Trie* next[26];
public:Trie(){isEnd = false;memset(next, 0, sizeof(next));}int insert(string word) {bool isNew = false;//判断是否为新单词Trie* node = this;for (char c : word){if (node->next[c - 'a'] == NULL){node->next[c - 'a'] = new Trie();isNew = true;//是新单词(因为创建了新结点,所以是新单词)}node = node->next[c - 'a'];}node->isEnd = true;return isNew ? word.length() + 1 : 0;//+1是因为还有#}};class Solution {
public:bool static cmp(const string str1, const string str2){return str1.length() > str2.length();}int minimumLengthEncoding(vector<string>& words){Trie*trie = new Trie();//根据列表中单词的长度由长到短进行排序,排好序后对每个单词反转顺序,最后再插入字典树sort(words.begin(), words.end(), cmp);for (int i = 0; i < words.size(); i++){reverse(words[i].begin(), words[i].end());}int res = 0;for (string word : words){res += trie->insert(word);}return res;}
};

法2思路:利用set去重,然后对于set中的每个字符串,删除set中与其后缀重复的字符串。

class Solution {
public:int minimumLengthEncoding(vector<string>& words) {unordered_set<string>myset(words.begin(), words.end());//利用迭代器构造set对象(自动去重)for (const string& s : myset){for (int i = 1; i < s.size(); i++){myset.erase(s.substr(i));}}int len = 0;for (auto it = myset.begin(); it != myset.end(); it++){len += (*it).size() + 1;}return len;}
};
string s = "abcde";
cout << s.substr(1);//返回的是string类的对象,结果为bcde

这篇关于200330题(820.单词的压缩编码(字典树))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/436452

相关文章

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML