class Solution {
public:
string rearrangestring(string str) {
string ret;
int arr[26] = { 0 };//建立哈希表,统计出现的字符
int n = str.size();
int m = 0;//记录出现最多的字符个数
char c = 0;//记录出现最多的字符
for(int i=0;i<n;i++)
{
int a = str[i] - 'a';
if(++arr[a]>m)
{
m = arr[a];
c = str[i];
}
}
if(m>(n+1)/2) return ret;//如果出现最多的字符大于总个数的一半,则不满足
char ch[100010];//按奇偶的方式重排字符
int x = 0;//先排偶
//先将最多的字符排好
while(m--)
{
ch[x] = c;
x += 2;
}
for(int j=0;j<26;j++)
{
if(arr[j] && j + 'a' != c)
{
while(arr[j]--)
{
if(x>=n) x = 1;//再排奇
ch[x] = j + 'a';
x += 2;
}
}
}
for(int a=0;a<n;a++)
{
ret += ch[a];
}
return ret;
}
};