文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写

  • 初始缩写由起始字母+省略字母的数量+结尾字母组成。
  • 若存在冲突,亦即多于一个单词有同样的缩写,则使用更长的前缀代替首字母,直到从单词到缩写的映射唯一。换而言之,最终的缩写必须只能映射到一个单词。
  • 若缩写并不比原单词更短,则保留原样。
示例:
输入: ["like", "god", "internal", "me", "internet", "interval", "intension", "face", "intrusion"]
输出: ["l2e","god","internal","me","i6t","interval","inte4n","f2e","intr4n"]注意:
n和每个单词的长度均不超过 400。
每个单词的长度大于 1。
单词只由英文小写字母组成。
返回的答案需要和原数组保持同一顺序。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/word-abbreviation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 对字符串进行分组(首尾字符+长度),这种情况,缩写才可能一样
  • 组内单词插入trie树,记录每个节点的占用次数,如果只出现1个人占用的,即可以确定唯一的缩写
class trie
{public:trie* next[26] = {NULL};int freq = 0;void insert(string& s){trie* cur = this;for(int i = 0; i < s.size(); i++){if(!cur->next[s[i]-'a'])cur->next[s[i]-'a'] = new trie();cur = cur->next[s[i]-'a'];cur->freq++;}}
};
class Solution {public:vector<string> wordsAbbreviation(vector<string>& dict) {unordered_map<string, vector<string>> group;unordered_map<string, int> w_id;for(int i = 0; i < dict.size(); ++i){string g = dict[i][0]+to_string(dict[i].size())+dict[i].back();group[g].push_back(dict[i]);//按首尾字符+长度信息给字符串分组w_id[dict[i]] = i;//序号信息}vector<string> ans(dict.size());for(auto& strs : group)//分组{trie* t = new trie(), *cur = t;for(auto& s : strs.second)t->insert(s);//组内单词插入trie树for(auto& s : strs.second)//遍历组内的单词{cur = t;string temp;//缩写for(int i = 0; i < s.size(); i++)//在trie中查找{if(cur->next[s[i]-'a']->freq == 1)//自己独有的字符{int count = s.size()-i-2;if(count >= 2)//缩写字符超过1个temp = s.substr(0,i+1)+to_string(count)+s.back();elsetemp = s;break;}cur = cur->next[s[i]-'a'];}ans[w_id[s]] = temp;}   }return ans;}
};

332 ms 330.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 527. 单词缩写(Trie树)相关推荐

  1. LeetCode 758. 字符串中的加粗单词(Trie树)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个关键词集合 words 和一个字符串 S,将所有 S 中出现的关键词加粗.所有在标签 <b> 和 </b> 中的字母都会加 ...

  2. LeetCode 720. 词典中最长的单词(Trie树)

    1. 题目 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. 若无 ...

  3. 720 词典中最长的单词(Trie树)

    1. 问题描述: 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. ...

  4. 单词压缩编码--Trie树

    问题描述:给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A.例如,如果这个列表是 ["time", "me", "bell ...

  5. 【bzoj4567】[Scoi2016]背单词 贪心+trie树

    我个傻逼,这么水的题还调了那么久. 把所有的串都反过来,建trie树,很明显,不同子树间是不影响的. 一定是先选择父亲节点再选子节点,同一个节点先选子树大小最小的儿子即可. 一开始想错了,以为可以直接 ...

  6. LeetCode 212. 单词搜索 II(Trie树+DFS)

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  7. LeetCode 648. 单词替换(Trie树)

    1. 题目 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词--我们称这个词为 继承词(successor).例如,词根an,跟随着单词 other(其他), ...

  8. LeetCode 616. 给字符串添加加粗标签(Trie树)

    文章目录 1. 题目 2. 解题 1. 题目 给一个字符串 s 和一个字符串列表 dict ,你需要将在字符串列表中出现过的 s 的子串添加加粗闭合标签 <b> 和 </b> ...

  9. LeetCode 1268. 搜索推荐系统(Trie树/multiset)

    1. 题目 给你一个产品数组 products 和一个字符串 searchWord ,products 数组中每个产品都是一个字符串. 请你设计一个推荐系统,在依次输入单词 searchWord 的每 ...

最新文章

  1. 路,链(迹),割的概念
  2. type python_typepython
  3. soapui工具_python接口自动化(四)--接口测试工具介绍(详解)
  4. 【Android UI设计与开发】第12期:顶部标题栏(三)ActionBar实现层级导航的返回效果
  5. Leetcode 436.寻找右区间
  6. 高级cmd攻击命令_一步一步学习DVWA渗透测试(Command Injection命令行注入)-第七次课...
  7. html列目录带图片,根据目录下的图片的个数,往html文件填充对应数量的img标签,请问有没有实现这种需求的工具?...
  8. pb90代码如何连接sql2008r2_RabbitMQ各种交换机机制,代码实践篇
  9. 转帖:Three Ways to Inject Your Code into Another Process
  10. C++--第22课 - 类模板 - 下
  11. Python 基础数据类型
  12. Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F 表情插入mysql 报错
  13. 深度学习 机器学习 数据集资源汇总
  14. 记录一次使用ghidra逆向分析斐讯K3官改固件web登录验证的经历
  15. java spider爬虫_一个简单的java网络爬虫(spider)
  16. 微信ipad协议(PC版)源码demo
  17. 网页设计排版中哪些元素最重要?
  18. C语言Hello World
  19. 一个有用的产品路线图应该是什么样的?
  20. matlab辨识函数ar多通道,AR模型之纠结与predict函数

热门文章

  1. python常用快捷键、写代码事半功倍_Pycharm常用快捷键总结及配置方法
  2. 单例设计模式-懒汉式(线程安全)
  3. 机器学习中的数学基础相关知识总结
  4. Linux格式化异常,Linux下DateFormat的parse方法出现”ParseException”异常
  5. php 获取delete蚕丝_php结合Redis实现100万用户投票项目,并实时查看到投票情况的案例...
  6. 如何用css和HTML结合画熊,结合伪元素实现的纯CSS3高级图形绘制
  7. mysql 8.0 yum_CentOS8 安装 MySQL8.0(yum)
  8. Linux设备驱动模型3——platform平台总线工作原理
  9. Bzoj 2127 happiness 最小割
  10. matlab中的qr函数