我的解法(复杂度O(nlogn))
基本思路是排序,统计,输出。。。
网上有直接开辟36维数组,可以用O(n)复杂度解决的。。。
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
bool func(char c)
{
if((c>='0'&&c<='9')||(c>='a'&&c<='z'))
return false;
else
return true;
}
int main(void)
{
string str;
while(cin>>str)
{
if(find_if(str.begin(),str.end(),func)!=str.end())
{
cout<<"<invalid input string>"<<endl;
continue;
}
sort(str.begin(),str.end());
string strNew="";
map<char,int> cMap;
//先统计个数
for(string::const_iterator it=str.begin();it!=str.end();it++)
{
if(cMap[*it]==0)
{
cMap[*it]=1;
}
else
{
cMap[*it]=cMap[*it]+1;
}
}
int nAdd=0;
while(nAdd<str.size())
{
for(map<char,int>::iterator it=cMap.begin();it!=cMap.end();it++)
{
if(it->second)
{
strNew+=it->first;
it->second=it->second-1;
nAdd++;
}
}
}
cout<<strNew<<endl;
}
}