1.题目描述
一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"
是由下面碎片组成的:'aaa'
,'bb'
,'c'
。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。
- 输入描述:
输入包括一个字符串s
,字符串s
的长度length
(1 ≤ length ≤ 50
),s
只含小写字母('a'
-'z'
) - 输出描述:
输出一个整数,表示所有碎片的平均长度,四舍五入保留两位小数。
如样例所示:s = "aaabbaaac"
所有碎片的平均长度= (3 + 2 + 3 + 1) / 4 = 2.25
- 输入例子 1:
aaabbaaac
- 输出例子 1:
2.25
2.题目解析
字符串统计
如何手动计算字符串碎片?
每次比较第一个字符与前一个字符是否相等,如果相等视为同一个碎片,反之,视为不同碎片。
字符串 | a | a | a | b | b | a | a | a | c |
---|---|---|---|---|---|---|---|---|---|
碎片个数 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 3 | 4 |
碎片总长度 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
3.参考答案
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
cin >> str;
char prev = str[0];
int count = 1;
for(int i = 1; i != str.size(); i++) {
if(prev != str[i]) {
prev = str[i];
count++;
}
}
printf("%.2f\n", 1.0*str.size() / count);
return 0;
}