Java字符串碎片

字符串碎片

一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:‘aaa’,‘bb’,‘c’。
现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少,结果直接取整,无需保留小数。

输入例子1:
“aaabbaaac”

输出例子1:
2

例子说明1:所有碎片的平均长度= (3 + 2 + 3 + 1) / 4 = 2

我们要的结果是:

平均碎片长度=(各碎片长度总和)/ 有多少份碎片

各碎片长度总和其实就是字符串长度

那么需要计算的就是 碎片份数

public class Main {
    /*
      这里是需要填写的方法
     */
    public static int GetFragment (String str) {
        //如果长度是0直接输出0
        if (str.length()==0){
            return 0;
        }
        //统计有多少份碎片
        int count = 0;
        //写一个数组用于存入每份碎片的长度,大小跟字符串一样长不会溢出
        int[] length = new int[str.length()];
        //记录当前是第几份碎片
        int x = 0;
        
        for(int i=0;i<str.length()-1;i++){
            //他是第x份碎片并且数据为0时,更改为1,因为每一份至少长度为1	
            if (length[x]==0){
                length[x]=1;
            }
            //如果当前下标字符跟下一个字符相同则长度+1
            if(str.charAt(i)==str.charAt(i+1)){
                length[x]++;
            }else{
                //不相同则跳到下一份
                x++;
                //份数+1
                count++;
            }
        }
        int sum = 0;
        //拿数组里的值累加,统计总长度
        for(int i = 0;i<count;i++){
            sum = length[i] + sum;
        }
        /*
        如果总长度跟输入的字符串不相等,说明以上循环最后一个下标跟
        倒数第二个不同,最后一份长度必是1,所以份数需要+1
        (这就是为什么我们要计算每份长度的原因,因为循环会概率性漏算最后一个)
        */
        if(sum!=str.length()){
            return str.length()/(count+1);
        }
        //如果相等就直接除
        return str.length()/count;
    }

    //输出测试结果
    public static void main(String[] args) {
        System.out.println(GetFragment("aaabbaaac"));
    }
    
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值