Leetcode--字符串压缩
发布日期:2021-04-30 21:00:58 浏览次数:125 分类:精选文章

本文共 1786 字,大约阅读时间需要 5 分钟。

为了实现字符串压缩功能,我们需要遍历字符串,记录每个字符连续出现的次数,并将这些信息压缩到结果字符串中。压缩后的字符串只有在长度更短的情况下才会返回,否则返回原字符串。

方法思路

  • 初始化变量:使用StringBuilder来构建结果字符串,记录当前字符和出现次数。
  • 遍历字符串:逐个字符处理,记录连续出现次数。
  • 处理字符变化:当遇到不同的字符时,处理当前字符块,添加相应的计数数字到结果字符串中。
  • 处理多位数字:当计数超过9时,分解为多位数字并依次添加。
  • 比较长度:最后比较结果字符串和原字符串的长度,返回更短的那个。
  • 解决代码

    public class Solution {    public String compressString(String S) {        if (S.length() == 0) {            return S;        }        StringBuilder x = new StringBuilder();        char currentChar = S.charAt(0);        int count = 1;        int i = 1;        int j = 0;        while (i < S.length()) {            if (S.charAt(i) != currentChar) {                // 处理当前字符的count                while (count > 0) {                    int digit = count % 10;                    x.append(digit + '0');                    if (digit != 0) {                        j++;                    }                    count /= 10;                }                x.append(currentChar);                currentChar = S.charAt(i);                count = 1;                i++;                j++;            } else {                count++;                i++;            }        }        // 处理最后一个字符块        while (count > 0) {            int digit = count % 10;            x.append(digit + '0');            if (digit != 0) {                j++;            }            count /= 10;        }        x.append(currentChar);        // 比较长度        if (x.length() >= S.length()) {            return S;        } else {            return x.toString();        }    }}

    代码解释

  • 初始化:检查字符串为空,直接返回。如果不为空,初始化StringBuilder和变量记录当前字符和计数。
  • 遍历字符串:从第二个字符开始,逐个比较当前字符和记录字符。
  • 处理字符变化:当字符变化时,处理当前字符的计数,将计数分解为多位数字并添加到结果字符串中,然后更新当前字符和计数。
  • 处理多位数字:通过循环处理每一位数字,确保数字正确添加到结果字符串中。
  • 最后处理:处理最后一个字符块,添加到结果字符串中。
  • 比较长度:根据结果字符串和原字符串的长度,决定返回哪一个。
  • 这种方法确保了字符串压缩的正确性和效率,能够处理所有字符以及多位计数的情况。

    上一篇:Netty4.x 整合MessagePack编解码应用开发
    下一篇:statement的增删改查和动态的增删改查

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2026年06月11日 20时41分43秒