一個由小寫字母組成的字符串能夠當作一些同一字母的最大碎片組成的。例如,"aaabbaaac"是由下面碎片組成的:'aaa','bb','c'。如今給定一個字符串,請你幫助計算這個字符串的全部碎片的平均長度是多少。數組
輸入包括一個字符串s,字符串s的長度length(1 ≤ length ≤ 50),s只含小寫字母('a'-'z')bash
輸出一個整數,表示全部碎片的平均長度,四捨五入保留兩位小數。 如樣例所示: s = "aaabbaaac" 全部碎片的平均長度 = (3 + 2 + 3 + 1) / 4 = 2.25測試
輸入:ui
aaabbaaac
複製代碼
輸出:spa
2.25
複製代碼
用for循環遍歷字符串的全部字符,從第一個開始直到最後一個,有兩個特殊狀況:code
i=1
時不須要判斷,直接將字符串賦值給臨時變量並將計數器+1i=string.length - 1
時,單獨判斷是否和上個字符同樣,同樣的話就計數器+1而後將計數器值push進數組中,不同的話就直接將1 push進數組中若是該字符和上個字符不同,就更換臨時字符,將計數器的值push進數組,而後另計數器的值爲1。若是該字符和上個字符同樣,就另計數器+1。字符串
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let str;
let result = [];
rl.on('line', (line) => {
let temp = ''
let count = 0;
for(i=0; i<line.length; i++){
if(i === line.length - 1){
if(temp.indexOf(line.charAt(i)) === -1) {
result.push(1);
} else {
count ++;
result.push(count);
}
}
if (i === 0) {
temp = line.charAt(i);
count ++;
} else if(temp.indexOf(line.charAt(i)) !== -1){
count ++;
} else if (temp.indexOf(line.charAt(i)) === -1){
result.push(count);
count = 1;
temp = line.charAt(i);
}
}
let sum = 0;
for(i=0; i<result.length; i++){
sum = sum + result[i];
}
console.log((sum/result.length).toFixed(2));
});
複製代碼
經測試,經過率100%。input
已解決 √string