zoukankan      html  css  js  c++  java
  • 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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

  • 相关阅读:
    你有没有发现你的文章被人侵权?推荐一个工具给你
    带你找到五一最省的旅游路线【dijkstra算法代码实现】
    【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?
    Floyd算法java实现demo
    【销售系统设计01】关于线上与线下销售业绩冲突处理
    jenkins maven 自动远程发布到服务器,钉钉提醒团队
    研究windows下SVN备份及还原恢复方案
    xamarin.android SurfaceView 实现 游戏 触摸摇杆
    C++ 头文件和源文件 和 编译流程
    十大经典排序算法总结(JavaScript描述)
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/10265074.html
Copyright © 2011-2022 走看看