主要就是利用哈希表把所有的字符出现次数都取出来,然后再把所有出现字符从前到后打印,再从后向前打印,打印一次哈希表中次数-1,到0以后不再打印。
class Solution {
public:
string sortString(string s) {
map<char,int>m;//哈希map,用于记录字符出现次数
set<char>chars;//记录出现的不同的字符
int maxtTime=0;//记录出现次数最多的字符,用于记录最多要重复多少次从先向后再从后向前遍历。
for(int i=0;i<s.size();i++){
m[s[i]]++;
if(m[s[i]]>maxtTime){
maxtTime=m[s[i]];
}
chars.insert(s[i]);
}
vector<char>v(chars.begin(),chars.end());
string res;
for(int i=0;i<maxtTime/2+maxtTime%2;i++){//循环遍历次数
for(int j=0;j<v.size();j++){//从前向后遍历
if(m[v[j]]){//如果剩余可以使用的次数不为0则把m[v[j]]值加入到res中
res=res+v[j];
m[v[j]]--;
}
}
for(int j=v.size()-1;j>=0;j--){//从后向前遍历
if(m[v[j]]){
res=res+v[j];
m[v[j]]--;
}
}
}
return res;
}
};