LeetCode算法题-String Compression(Java实现)
这是悦乐书的第230次更新,第242篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第97题(顺位题号是443)。给定一组字符,就地压缩它。压缩后的长度必须始终小于或等于原始数组。数组的每个元素都应该是长度为1的字符(不是int)。在就地修改输入数组后,返回数组的新长度。例如:
输入:["a","a","b","b","c","c","c"]
输出:返回6,输入数组的前6个字符应为:["a","2","b","2","c","3"]
说明:"aa"被"a2"取代。"bb"被"b2"取代。"ccc"被"c3"取代。
输入:["a"]
输出:返回1,输入数组的前1个字符应为:["a"]
说明:什么都没有被取代。
输入:["a","b","b","b","b","b","b","b","b","b","b","b","b"]
输出:返回4,输入数组的前4个字符应为:["a","b","1","2"]。
说明:由于字符"a"不重复,因此不会压缩。 "bbbbbbbbbbbbb"被"b12"取代。请注意,每个数字在数组中都有自己的条目。
注意:
- 所有字符在[35,126]中都有ASCII值。
- 1 <= len(字符)<= 1000。
跟进:你能用O(1)额外空间解决它吗?
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 解题
此题我们需要做两件事,一是将重复的字符进行替换,二是计算被替换后新数组的长度。此题是不需要先将元素排序的,定义一个从0开始的索引,判断当前元素是否是连续出现,如果是单个,直接使用新索引进行替换,如果是多次出现,把次数记录下来,先将当前元素保留一个坑位,然后将出现的次数先变成字符串,再变成字符数组,紧跟着该元素后面进行替换,最后一次进行替换的索引就行新数组的长度。
public int compress(char[] chars) {
int sum = 0, index = 0;
while (index < chars.length) {
char current = chars[index];
int num = 0;
while (index < chars.length && chars[index] == current) {
index++;
num++;
}
chars[sum++] = current;
if (num != 1) {
for (char ch : (num+"").toCharArray()) {
chars[sum++] = ch;
}
}
}
return sum;
}
03 小结
算法专题目前已连续日更三个月,算法题文章97+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-String Compression(Java实现)的更多相关文章
- LeetCode算法题-Sqrt(Java实现)
这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...
- LeetCode算法题-Heaters(Java实现)
这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Repeated String Match(Java实现)
这是悦乐书的第289次更新,第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686).给定两个字符串A和B,找到A必须重复的最小次数,使得B是 ...
- LeetCode算法题-Construct String from Binary Tree(Java实现)
这是悦乐书的第273次更新,第288篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第141题(顺位题号是606).构造一个字符串,该字符串由二叉树中的括号和整数组成,并具 ...
- LeetCode算法题-Reverse Words in a String III(Java实现)
这是悦乐书的第259次更新,第272篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第126题(顺位题号是557).给定一个字符串,您需要反转句子中每个单词中的字符顺序,同 ...
- LeetCode算法题-Reverse String II(Java实现)
这是悦乐书的第256次更新,第269篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第123题(顺位题号是541).给定一个字符串和一个整数k,你需要反转从字符串开头算起的 ...
- LeetCode算法题-Find All Anagrams in a String(Java实现)
这是悦乐书的第228次更新,第240篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第95题(顺位题号是438).给定一个字符串s和一个非空字符串p,找到s中p的字谜的所有 ...
随机推荐
- OJ:神秘的数组初始化
描述 填空,使得程序输出指定结果 #include <iostream> using namespace std; int main() { int * a[] = { // 在此处补充你 ...
- 高负载集群实战之lvs负载均衡-技术流ken
lvs简介 LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器. 特点 跨平台:window,linux 作用 实现负载均衡 核心组件 ip_vs:linux的内核功能 ...
- centos7+cobbler+kickstart
一.cobbler简介 cobbler 是一个系统启动服务boot server,可以通过pxe得方式用来快速安装,重装系统,支持安装不同linux发行版和windows.这个工具是用python开发 ...
- RNN入门(三)利用LSTM生成旅游点评
介绍 前几天,某个公众号发文质疑马蜂窝网站,认为它搬运其它网站的旅游点评,对此,马蜂窝网站迅速地做出了回应.相信大多数关注时事的群众已经了解了整个事情的经过,在这里,我们且不论这件事的是是非非,也 ...
- 【转载】Sqlserver阻止保存要求重新创建表的更改
在Sqlserver创建完表table后,后续维护过程中有时候需要往表格中新增字段,在表设计窗体中新增字段后保存,有时候会直接抛出错误信息,提示“不允许保存更改,您所做的更改要求删除并重新创建以下表” ...
- C# Task用法
1.Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: ◆ ThreadPool不支持线程的取消.完成.失败通知等交互性 ...
- composer Content-Length mismatch
今天在执行 :composer update 时一直提示: 本地 package.json如下: { "private": true, "scripts": { ...
- 前端入门4-CSS属性样式表
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 声明 本系列文章内容全部梳理自以下四个来源: <HTML5权威指南> <JavaScript权威指南> MD ...
- js 冒泡排序、快速排序、去重、查找字符串最多值(面试常有)
冒泡排序 var bubbleSort = function(arr) { for (var i = 0; i < arr.length-1; i++) { for (var j = i+1; ...
- C#基础(201)--常量枚举
本文知识点: 1.掌握常量的定义和使用方法 2.理解枚举的作用和特点 3.掌握枚举的使用方法 1.1.常量的定义语法 const 数据类型 常量名称 = 值: 1.2.常见错误 1.3常量的 ...