解题思路

创建一个长度为26的数组count,代表26个英文字母出现的次数,并把数据初始化为0。遍历字符串拿到里面的每一个字符,其中 字符 - 'a' 就是该字符在count里对应的下标。最后遍历count,输出每一个不为0的元素和该位置对应的字符。

代码实现

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
    string s;
    cin>>s;
    // count用来统计26个英文字母出现的次数
    vector<int> count(26);
    // 1、遍历字符串,把各个字符出现的次数映射到count中
    for(auto& e : s)
    {
        ++count[e - 'a'];
    }
    // 2、遍历count数组并叠加字符ch,打印归一化后的结果
    char ch='a';
    for(auto& e : count)
    {
        if(e)
        {
            cout<<ch<<e;
        }
        ++ch;
    }
    cout<<endl;
    return 0;
}

性能分析

  • 时间复杂度:O(n)。其中n为字符串的长度。
  • 空间复杂度:O(1)。只创建有限大小的数组count。