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; } };