java字符串处理系列 统计字符串中重复字符的个数,并且将该字符与次数进行拼接

题目描述

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)

示例

在这里插入图片描述
在这里插入图片描述

算法代码

package zifuchuan.demo;
     // 力扣  字符串题目   字符串的压缩
public class Domn {
    public void compressString(String S){
           int N = S.length();
           int i = 0;
           StringBuilder res = new StringBuilder();
           while(i < N ){
               int j = i;
               //charAt()方法返回指定索引位置的字符
               while( j < N && S.charAt(i) == S.charAt(j)){
                   j++;
               }
               //向字符串生成器中追加内容
               res.append(S.charAt(i));
               res.append(j-i);
               i = j;
           }
           String sb = res.toString();
           if(sb.length() <N){
               //return sb;   使用return时应该将上述方法函数中的 void 替换为String
               System.out.println(sb);
           }else{
               //return S;
               System.out.println(S);
           }
    }
    public static void main(String[] args){
        String S = new String("aabcccccaaa");
        Domn  fgdj = new Domn();
        fgdj.compressString(S);
    }
}

思路总结

方法:双指针
1、这一题的核心思路主要是首先统计出字符串中连续的字符的个数,然后将这个连续字符和该字符个数连接在一起,统计完所有的字母后输出新的字符串。
2、代码步骤,首先实例化一个字符串生成器对象, 将第一指针 i 赋初值0,表示将指针 i 放在索引为 0 的位置, 利用while外循环来实现整个过程,将第二个指针的起始位置也放在索引为 0 的位置,再执行while内循环,内循环的判断条件是,第二个指针索引的位置要小于要进行压缩的字符串S的长度,,同时还需要满足的就是两个指针对应位置的字符是否相等,上述两个条件均满足的就移动第二个指针 j ,直到跳出该while内循环。
3、将此时第一个指针 i 对应的字符追加到StringBuilder类实例化的res对象中,然后将第二个指针与第一个指针的差值追加到res对象中,最后将 j 指针索引位置的字符赋给 i ,再将res转变成字符串对象。
4、最后加上一个判断条件,当新生成的字符串的长度小于字符串S,则返回 res。当新生成的字符串长度大于S时,则返回原字符串S。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值