336. 文本压缩

描述

给你一个只含有可见字符(ASCII 码范围 32 至 126)文本文件,文件中可能出现一些重复的单词,你需要对它们进行压缩。
压缩规则如下:

  1. 如果原文件中的字符不是英文字符,那么保留这些字符。
  2. 我们将连续的英文字符视为一个单词,单词的前后不应该还有其它的英文字符。
    2.1. 如果一个单词在它之前的文本中没有出现过,那么保留它。
    2.2. 如果一个单词在它之前出现过,将其替换成前文中它第一次出现是第几个不同单词的编号。
  • 压缩中应该大小写敏感,“Abc” 和 “abc” 不是同一个单词。
  • 文本中总的字符数为 N,1 <= N <= 104​​ 。
  • 一个单词不会跨行显示。

说明

样例中,please 是第 2 个出现的不同的单词,it 是第 4 个出现的不同的单词,very 是第 7 个出现的不同的单词。

样例 1:

输入:Please, please do it--it would please Mary very,very much.Thanks
输出:Please, please do it--4 would 2 Mary very,7 much.Thanks

原题链接点这里


文章目录

  • 336. 文本压缩
    • 描述
    • 说明
    • 样例 1:
  • 题解
  • 最后说两句
  • 声明

题解

public class Solution {/*** @param lines: the text to compress.* @return: return the text after compression.*/public String[] textCompression(String[] lines) {// write your code here.// 结果集String[] ret = new String[lines.length];// 单词索引表Map<String, Integer> iMap = new HashMap<>();// 行缓存StringBuilder lsb = new StringBuilder();// 单词缓存StringBuilder tsb = new StringBuilder();for (int i = 0; i < lines.length; ++i) {char[] line = lines[i].toCharArray();for (int j = 0; j < line.length; ++j) {char c = line[j];if (Character.isLetter(c)) {// 是字母就放入单词缓存tsb.append(c);} else {// 处理单词缓存this.handleTempBuffer(lsb, tsb, iMap);// 将非字母字符放入行lsb.append(c);}}// 一行完毕要把单词缓存处理下this.handleTempBuffer(lsb, tsb, iMap);// 将处理完的行放入结果集ret[i] = lsb.toString();// 将行缓存清空lsb.setLength(0);}return ret;}private void handleTempBuffer(StringBuilder lsb, StringBuilder tsb, Map<String, Integer> iMap) {// 单词缓存不为空if (tsb.length() != 0) {String  t     = tsb.toString();// 看映射表是否存在这个单词Integer index = iMap.get(t);if (index == null) {// 第一次出现index = iMap.size();iMap.put(t, index + 1);lsb.append(t);} else {// 不是第一次出现lsb.append(index);}// 清空单词缓存tsb.setLength(0);}}
}

最后说两句

非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

作者水平有限,如果文章内容有不准确的地方,请指正。

希望小伙伴们都能每天进步一点点。

声明

本文由二当家的白帽子博客原创,转载请注明来源,谢谢~

【精】领扣LintCode算法问题答案:336. 文本压缩相关推荐

  1. 领扣LintCode算法问题答案-83. 落单的数 II

    领扣LintCode算法问题答案-83. 落单的数 II 目录 83. 落单的数 II 描述 样例 1: 样例 2: 题解 鸣谢 83. 落单的数 II 描述 给出 3 * n + 1 个非负整数,除 ...

  2. 领扣LintCode算法问题答案-1438. 较大分组的位置

    领扣LintCode算法问题答案-1438. 较大分组的位置 目录 1438. 较大分组的位置 描述 样例 1: 样例 2: 样例 3: 题解 鸣谢 1438. 较大分组的位置 描述 在一个由小写字母 ...

  3. 领扣LintCode算法问题答案-175. 翻转二叉树

    领扣LintCode算法问题答案-175. 翻转二叉树 目录 175. 翻转二叉树 鸣谢 175. 翻转二叉树 翻转一棵二叉树.左右子树交换. 样例 1: 输入: {1,3,#} 输出: {1,#,3 ...

  4. 领扣LintCode算法问题答案-514. 栅栏染色

    领扣LintCode算法问题答案-514. 栅栏染色 目录 514. 栅栏染色 题解 鸣谢 514. 栅栏染色 我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染. 必须保证不存在超过2 ...

  5. 领扣LintCode算法问题答案-82. 落单的数

    领扣LintCode算法问题答案-82. 落单的数 目录 82. 落单的数 鸣谢 82. 落单的数 给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 样例 1: ...

  6. 领扣LintCode算法问题答案-420. 报数

    领扣LintCode算法问题答案-420. 报数 目录 420. 报数 鸣谢 420. 报数 报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数.如下所示: 1, 11, 21, 1211, ...

  7. 领扣LintCode算法问题答案:56. 两数之和

    56. 两数之和 描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 ...

  8. 领扣LintCode问题答案-2. 尾部的零

    领扣LintCode问题答案-2. 尾部的零 目录 2. 尾部的零 鸣谢 2. 尾部的零 设计一个算法,计算出n阶乘中尾部零的个数 样例 1: 输入: 11 输出: 2 样例解释: 11! = 399 ...

  9. 领扣LintCode问题答案-58. 四数之和

    领扣LintCode问题答案-58. 四数之和 目录 58. 四数之和 鸣谢 58. 四数之和 给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d) ...

最新文章

  1. 如何禁用<textarea>的调整大小抓取器? [重复]
  2. 手把手教你如下在Linux下如何写一个C语言代码,编译并运行
  3. 特征匹配 + 单应性查找对象
  4. BizTalkServer 如何发送 EDI 消息(3)
  5. 微信推出QQ小程序遭网友吐槽:请不要俄罗斯套娃
  6. 详解CSS position属性
  7. [转载] sklearn FutureWarning: numpy not_equal will not check..., The comparison did not return the sam
  8. 吴恩达课后作业学习1-week4-homework-two-hidden-layer -1
  9. 【学习笔记9】Linux常用命令6 - 压缩解压命令
  10. tar和其他一些压缩解压工具
  11. Codeforces Gym 100015H Hidden Code(暴力)
  12. Android批量添加联系人到通讯录
  13. Python入门习题大全——词汇表2
  14. 1001 hzy 和zsl 的生存挑战
  15. java 圆角窗口_JAVA实现圆角窗体 .
  16. 百家讲坛 雍正十三年(下部)
  17. 命令行 笔记本键盘禁用_笔记本触控板怎么关
  18. flash/flex基础发展区别等
  19. HBase系列(六)优化
  20. VC操作EXCEL2003

热门文章

  1. airplay协议开发第3部(mdnsd注册airplay服务)
  2. 力扣881. 救生艇(贪心,双指针)
  3. 【HDU 4905 多校联合】The Little Devil II【DP+四边形不等式优化】
  4. 从AMSU-A回收飓风暖芯并重新映射ATMS测量并消除雨水污染
  5. 数据分析----数据探索实践(工业蒸汽预测)
  6. 中年油腻程序员:我为什么放弃vscode
  7. 在微信怎么添加定位服务器地址,微信怎么添加地址定位?
  8. Python注释规范
  9. 自动驾驶车辆横纵向舒适性浅谈
  10. 一个GIS研究生的自白