【字符统计及重排】给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及 其出现次数。如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前,
输入描述: 输入一行,为一个仅包含字母的字符串
输出描述: 按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意未尾的分号,字母和次数间用英文冒号分隔,
示例:
1.输入: xyxyXX
输出:x:2;y:2;X:2;
说明: 每个字符出现的次数为2 故x排在y之前,而小写字母x在大写X之前
2.输入: abababb
输出:b:4;a.3
说明: b的出现个数比a多 故排在a前
function countAndSortLetters(input: string): string {
const letterCount = new Map<string, number>();
// 统计每个字母出现的次数
for (const char of input) {
if (letterCount.has(char)) {
letterCount.set(char, letterCount.get(char)! + 1);
} else {
letterCount.set(char, 1);
}
}
// 将统计结果转换为数组
const entries = Array.from(letterCount.entries());
// 按照出现次数从大到小排序,如果次数相同,按字母自然顺序排序
entries.sort((a, b) => {
if (a[1] === b[1]) {
return a[0].localeCompare(b[0]);
}
return b[1] - a[1];
});
// 构建输出字符串
const result = entries.map(entry => `${entry[0]}:${entry[1]}`).join(';') + ';';
return result;
}
// 测试示例
console.log(countAndSortLetters("xyxyXX")); // 输出: x:2;y:2;X:2;
console.log(countAndSortLetters("abababb")); // 输出: b:4;a:3;