首页 > 试题广场 >

字符串碎片

[编程题]字符串碎片
  • 热度指数:237 时间限制: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
s = input()
letter,num,sa = '',0,len(s)
for i in s:
    if letter!=i:
       num+=1
       letter=i
print("%.2f"%(sa/num))

发表于 2018-12-26 22:52:53 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s = sc.nextLine();
        char[] arr=s.toCharArray();

        int cout =1;//碎片个数
        char pre=arr[0];
        for (int i=1;i<arr.length;i++){
            if (arr[i]!=pre){
                pre=arr[i];
                cout++;
            }
        }
        System.out.println(String.format("%.2f",(float) arr.length/cout));
    }
}

发表于 2018-10-20 15:20:11 回复(0)
#include<stdio.h>
#include<iostream>
#include<iomanip>

using namespace std;

double countmany(string s, int count, int now, char last){
    if(now >= s.length()){
        return (double) s.length()/count;
    }else{
        if(s.at(now) != last){
            count += 1;
            last = s.at(now);
        }
        return countmany(s, count, now+1, last);
    }
}

int main(){
    string s;
    cin >> s;
    double res = countmany(s, 1, 1, s.at(0));
    if(s.empty()){
        return 0;
    }
    cout << fixed << setprecision(2) << res;
}

发表于 2018-05-29 09:04:52 回复(0)