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;
}