算法:字符串压缩

本文探讨了LeetCode上的字符串压缩问题,通过Java代码实现将连续重复字符计数的压缩方法。然而,当压缩后的字符串长度未减少时,原字符串会被保留。在编码过程中遇到使用`ss[i++]`时的潜在问题,建议避免此类迭代方式以防止意外循环。文章还对比了Java和C在处理字符串压缩时的差异,强调Java在数字转字符串和内存管理上的便利性。
摘要由CSDN通过智能技术生成

leetcode 字符串压缩

在这里插入图片描述

将字符串中的多个连续单词,只记录其数目。但是压缩后的字符串没有变短,仍然返回原先的字符串。


代码:

class Solution {
    public String compressString(String S) {
        char[] ss = S.toCharArray();
        String s = "";
        for (int i = 0; i < ss.length;) {
            char c = ss[i++];
            int num = 1;
            while (i < ss.length && ss[i] == c) {
                num++;
                i++;
            }
            s = s + String.valueOf(c) + String.valueOf(num);
        }
        if (s.length() >= S.length()) return S; 
        return s;
    }
}

这里使用 Java 进行编写,其主要是因为将数组转化为字符串比 C 较简单点。

C 当数字较大时,将数字转换为字符串就较为麻烦。同时,Java也不用考虑超出内存的问题。

先获取每个字符,记录当前字符,如果下一个字符相等,则进入循环,直到下一个字符与当前记录的字符不相等,则退出循环。并记录字符和个数。最后判断压缩后的字符串与原字符串的大小,决定返回那个字符串。

结果
在这里插入图片描述

写这个题目的时候,遇到在数组中使用 ss[i++] 时,不相等时仍会进入循环,这个问题不知道是 leetcode 编译器的问题,还是其他原因,以后尽量少使用这种模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值