根據字符串字符的個數排序輸出

題目描述

若是統計的個數相同,則按照ASII碼由小到大排序輸出 。若是有其餘字符,則對這些字符不用進行統計。數組

實現如下接口:
    輸入一個字符串,對字符中的各個英文字符,數字,空格進行統計(可反覆調用)
    按照統計個數由多到少輸出統計結果,若是統計的個數相同,則按照ASII碼由小到大排序輸出
    清空目前的統計結果,從新統計
調用者會保證:
輸入的字符串以‘\0’結尾。spa

輸入描述:

輸入一串字符。code

輸出描述:

對字符中的
各個英文字符(大小寫分開統計),數字,空格進行統計,並按照統計個數由多到少輸出,若是統計的個數相同,則按照ASII碼由小到大排序輸出 。若是有其餘字符,則對這些字符不用進行統計。對象

解題思路

(1)建立新對象,遍歷字符串,將字符串的字符做爲對象的屬性值,而且將字符做爲字符對象,賦予value和count屬性blog

(2)將對象轉化爲字符對象數組,調用數組的sort方法進行排序,首先排序依據count值,當count值相同時依據value值的ascii碼排序

(3)將排好序的字符對象數組的value值拼接成字符串輸出。接口

//利用對象的屬性和比較來作的
function charCnt(str){
    var obj = {};
    //建立字符對象
    for(var i=0 ; i<str.length; i++){
        var char = str.charAt(i);
        if(obj[char] && obj[char].value == char){
            ++obj[char].count;
        }else{
            obj[char] = {};
            obj[char].value = char;
            obj[char].count = 1;
        }
    }
    // console.log(obj);
    // 轉化爲字符對象數組
    var arr = [];
    for(var k in obj){
        arr.push(obj[k]);
    }
    
    //屬性值比較,先比較字符次數,次數相同比較ASCII碼
    var arr2 = arr.sort(function(obj1,obj2){
        if(obj1.count < obj2.count){
            return 1;
        }else if(obj1.count > obj2.count){
            return -1;
        }else{
            return (obj1.value).charCodeAt() - (obj2.value).charCodeAt();
        }
    });
    var result = '';
    for(var j=0; j<arr2.length; j++){
        result += arr2[j].value;
    }
    return result;
}
console.log(charCnt('8v26ktzk069lm400061m0v965we88850o6omqi532ktir6esb55t0kqm026y8rk63aj82kcx48gd1tiylvs0xo32zem65q7z5ce2185d2ascz62a2p3ajr45h637t2p290lc043gicp5ldzzmx2'));  //206583kmzct4aeil19dopqrsvx7gjybhw

 

連接:https://www.nowcoder.com/questionTerminal/c1f9561de1e240099bdb904765da9ad0
來源:牛客網ci

相關文章
相關標籤/搜索