首页 > 试题广场 >

字符串碎片

[编程题]字符串碎片
  • 热度指数:184 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:'aaa','bb','c'。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。

输入描述:
输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s只含小写字母('a'-'z')


输出描述:
输出一个整数,表示所有碎片的平均长度,四舍五入保留两位小数。

如样例所示: s = "aaabbaaac"
所有碎片的平均长度 = (3 + 2 + 3 + 1) / 4 = 2.25
示例1

输入

aaabbaaac

输出

2.25
#include <string>
#include <iostream>
#include <stdio.h>

using namespace std;

float getResult(const string& str) {
    int len = str.size();
    int denominator = 1;
    for(int i = 1; i < len; ++i) {
        if(str[i] != str[i - 1]) {
            denominator++;
        }
    }
    
    float res = static_cast<float>(len) /  denominator;
    return res;
}

int main() {
    string str;
    while(cin>>str) {
        auto res = getResult(str);
        printf("%.2f\n",res);
    }
}

编辑于 2018-05-28 20:13:15 回复(0)


import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;


public class Main {


    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in); 

        String s=sc.nextLine(); 

        List<String> pieces = new ArrayList<>();

        char[] c=s.toCharArray();

        int Sum=0;

        String param="",p="";

        

        for(int i=0;i<s.length();i++){

            param=String.valueOf(c[i]);

            if(p==""){

                p=param;

            }else if (p.contains(param)){

                p=p+param;

            }else{

                pieces.add(p);

                p=param;

            }

        }

        pieces.add(p);

        for(String piece:pieces){

            Sum=Sum+piece.length();

        }

        float res= ((float)(Sum*1.00)/pieces.size());

        System.out.println(res);


    }


}


发表于 2019-08-01 21:34:47 回复(0)
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        char a = s.charAt(0);
        double avgLength = 0;
        double count = 1;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) != a) {
                a = s.charAt(i);
                count++;
            }
        }
        avgLength = s.length() / count;
        System.out.println(String.format("%.2f", avgLength));
    }
}

发表于 2019-08-13 17:41:40 回复(0)