算法題--字符串分塊計算平均長度

問題:

一個由小寫字母組成的字符串能夠當作一些同一字母的最大碎片組成的。例如,"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時不須要判斷,直接將字符串賦值給臨時變量並將計數器+1
  • i=string.length - 1時,單獨判斷是否和上個字符同樣,同樣的話就計數器+1而後將計數器值push進數組中,不同的話就直接將1 push進數組中

若是該字符和上個字符不同,就更換臨時字符,將計數器的值push進數組,而後另計數器的值爲1。若是該字符和上個字符同樣,就另計數器+1。字符串

JS代碼:

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

相關文章
相關標籤/搜索