1.5利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。如字符串aabcccccaaa会变成a2b1c5a3。若压缩后的字符串没有变短,则返回原字符串。...

方法1:直观却不够好。原因是字符串的拼接操作的时间复杂度为O(n平方)。

public String compressBad(String str)
{
    String mystr = "";
    char last = str.charAt(0);
    int count = 1;
    for (int i = 1; i < str.length(); i++)
    {
        if (str.charAt(i) = last)
        {
            count++;
        }
        else
        {
            mystr += last + "" + count;
            last = str.charAt(i)
            count = 1;
        }
    }
    return mystr + last + count;
}

方法2:以下使用了StringBuffer优化了部分性能。(PS:从逻辑上看没区别。)


String compressBetter(String str) {
int size = countCompression(str); if (size >= str.length()) { return str; } StringBuffer mystr = new StringBuffer(); char last = str.charAt(0); int count = 1; for (int i = 1; i < str.length(); i++) { if (str.charAt(i) == last) { count++; } else { mystr.append(last); mystr.append(ccount); last = str.charAt(i); count = 1; } } mystr.append(last); mystr.append(ccount); return mystr.toString(); }
//专门用来数长度
int countCompression(String str) { if (str == null || str.isEmpty()) return 0; char last = str.charAt(0); int size = 0; int count = 1; for (int i = 1; i <str.length(); i++) { if (str.charAt(i) == last) { count++; } else { last = str.charAt(i); size += 1 + String.valueOf(count).length(); count = 1; } } size += 1 + String.valueOf(count).length(); return size; }

 

转载于:https://www.cnblogs.com/wuzhenyang/p/7755978.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值