原题链接
一、题目描述
二、做题学习。
这一题,难度属于简单,但是我写的那玩意太垃圾了,最后学习了下官方的题解。官方的题解用到了桶排序的思想,就是把建立一个计数数组count[26]
,这个每一个元素的值就是字符串内字母出现的个数(一开始统一设置为0)。这样的话,我们从小到大找字符,和从大到小找字符直接通过遍历一遍数组来得到结果。其中每遍历一次数组,都要把得到的字符加入到结果字符串中resultstring
中,同时,该元素个数减一,对应题目中的移除元素。外层设置一个循环,判断条件为结果字符串是否与原字符串长度相等,即是否所有的字符都用上了。都用上了,那么新的字符串也就生成了。
代码如下:
class Solution {
public:
string sortString(string s) {
int count[26];
memset(count,0,sizeof(count));
int length=s.size();
int temp;
for(int i=0;i<length;i++){
temp = s[i]-'a';
count[temp]++;
}
string resultstring;
while(resultstring.size()!=length){
for(int i=0;i<26;i++){
if(count[i]>0){
resultstring.push_back('a'+i);
count[i]--;
}
}
for(int i=25;i>=0;i--){
if(count[i]>0){
resultstring.push_back('a'+i);
count[i]--;
}
}
}
return resultstring;
}
};