题解 | 2、【C++】字符串归一化
字符串归一化
http://www.nowcoder.com/questionTerminal/6d5e036defdf408681376a4a9d4930ff
解题思路
创建一个长度为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。