NC 压缩字符串(一)

系列文章目录



前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


描述
利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2bc5a3。
1.如果只有一个字符,1不用写
2.字符串中只包含大小写英文字母(a至z)。

在这里插入图片描述

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param param string字符串 
     * @return string字符串
     */
    public String compressString(String param) {
        // write code here

        // 一些特殊情况的处理
        if (0 == param.length() || 1 == param.length()) {
            return param;
        }

        int len = param.length(); // 定义一个整型变量,用于存放 param 的长度
        int p = 1; // 定义一个指针,用于指向当前所在的位置
        int account = 1; // 定义一个整型变量,用于存放当前位置上的字符连续出现的次数
        char chr = param.charAt(0); // 定义一个变量,用于存放临时的字符
        StringBuffer sb = new StringBuffer(""); // 定义一个 StringBuffer,用于存放最终的返回结果

        while (p < len) { // 不能越界
            char tmp = param.charAt(p); // 获取 p 指针指向的当前位置上的字符
            if (tmp == chr) {
                account++; // 如果当前位置上的字符和它的前一个字符相等,那么 account++
                p++; // 同时,p 指针向后移动一位
            } else { // 如果当前位置上的字符和它的前一个字符不相等,那么就要将它的前一个字符及其出现次数加入到 StringBuffer 中
                if (account == 1) {
                    sb.append(chr); // 如果前一个字符出现的次数为 1,那么直接将字符加入到 StringBuffer 中即可
                } else {
                    sb.append(chr);
                    sb.append(account);
                }
                chr = tmp;
                account = 1;
                p++;
            }
        }
        // 别忘了,p 越界之后,将剩余的字符加入到 StringBuffer 中
        if (account == 1) {
            sb.append(chr);
        } else {
            sb.append(chr);
            sb.append(account);
        }
        return new String(sb);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java毕设王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值